2015-01-28 3 views
-3

말해봐, base62 번호 (알파벳 : [aAbBcC-yYzZ0-9]) char *num="abcd"이 있다고합니다. 그런 숫자를 만드는 데 사용 된 알파벳은 알파벳 순서가 아닌 문자로 구성됩니다! ('A'뒤에 'A'가 아니라 'B').base62 숫자 추가

시퀀스의 다음 번호를 얻는 방법 (base62 번호에 1을 추가하는 방법)? 다음은 "abce"이고 이전은 "abcc"입니다. 당신이 나에게 약간의 코드를 제공하면 고맙겠습니다.

+0

기본 * 52 *가 아니겠습니까? –

+0

@JoachimPileborg, 오우, 죄송합니다. 수정 해 드리겠습니다. – ForceBru

+3

글자, 대문자 및 하울, * 및 숫자 (자릿수) *는 62입니다. –

답변

1

"숫자"(예 : 문자열 "05DprPaGAg"과 같이)라고 가정하면 매우 쉽습니다. 하나씩 늘리려면 숫자 순서 문자열에서 문자를 찾아 다음 문자를 얻고, 숫자 순서 문자열에서 문자를 찾아 이전 문자를 가져 오려면 하나씩 줄이려면 다음 문자를 가져옵니다.

감소시킬 숫자가 가장 낮은 숫자 (예제 알파벳의 0) 인 경우 위에서 설명한 방법을 사용하여 두 번째 최하위 숫자를 줄이고 다음 중 가장 낮은 숫자에 대해 가장 높은 숫자를 사용하십시오. 감소 할 숫자. 증가를 위해 반대를하십시오.

+0

...하지만 25를 0으로 "올리면 왼쪽으로도 이동해야하고 1을 더해야합니다."즉, "하나만 가지고 가십시오" –

+0

OK, 1e9 시간 정도하고 싶다면 느리게 진행됩니다. 그렇지 않니? – ForceBru

+0

@ForceBru 많은 연산을 수행하는 데는 알고리즘에 상관없이 시간이 걸리지 만 더 나은 데이터 구조를 사용하여 오프셋 할 수 있습니다. 예를 들어 C++로 프로그래밍하는 경우 예를 들어 다음과 같이 사용할 수 있습니다. 'std :: map'을 사용하여 각 자리를 다음 자리와 이전 자리를 포함하는'std :: pair '에 매핑합니다. (참고 : 실제로 문자열을 검색하는 것보다 효과적인지 알 수는 없습니다.) –

0
  1. 각 문자를 (62 기수에서) 나타내는 숫자로 매핑하십시오.

  2. 수동으로 수행하는 것처럼 간단한 추가 작업을 사용합니다 (필요한 경우 가장 오른쪽 위치부터 시작).

  3. 뺄셈은 거의 동일한 방식으로 수행 할 수 있습니다 (가장 오른쪽 위치부터 시작하여 필요에 따라 "-"를 나 타냅니다).

+0

그것은'map'을 사용하여 C++에서 작동합니다. 순수한 C는 어때? – ForceBru

+0

@ForceBru지도를 사용하여 문자를 어떤 것에 매핑 할 필요는 없습니다. 간단한 배열을 사용할 수 있습니다.'digit [c] '는'c' 문자가 나타내는 숫자입니다. – kraskevich

+1

@ForceBru, 순수 C를 원한다면 질문에서 [C++] 태그를 제거해야합니다. –

2

과 같은 질문에 대한 일반적으로 최선의 답변은 무엇입니까?는 기본-N에서

변환이 기초-2 (충분한 그렇지 않으면 쉽게 N==2 경우 사소한를) 기본-2에서 계산 컴퓨터의 초고속 하드웨어 구현 기능을 사용하고 있습니다 2에서 base-N로 변환하십시오.

내 어리석은 제안을 거부하는 동안 컴퓨터가 기본 10 산술을한다고 생각하게 만드는 방법을 고려해보십시오.

이 방법은 숫자를 10 진수로 변환하지 않도록 OP의 엄격한 지침을 준수해야합니다.

+0

와우, 사실을 말하면, 나는 기초 2에 대해서 생각해 본 적이 없다. 좋은 생각이야. – ForceBru