2011-04-29 3 views
2

십진수를 3 진으로 변경하는 방법은 무엇입니까? 나는 modulo를 사용하지 않고 메서드를 나누고 싶지 않다는 것을 의미한다. 128123832812381835828638486384863486과 같은 매우 큰 10 진수를 가진다. ............. 1237127317237 등등.C 10 진수에서 3 진수로 빠른 기본 변환

또한 bigints를 사용하고 싶지 않습니다.

어떤 방법이 있습니까?

+0

제 3의 의미는 무엇입니까? 기지 세? –

+0

"십진법"이라고 할 때, 인간이 읽을 수있는 문자열 표현을 가지고 있다는 것을 의미합니까? –

+0

"기본 변환 알고리즘"에 대한 검색 결과가 Google에 많이 있습니다. 어떤 링크가 도움이 되었습니까? –

답변

4

나누기/모듈을 사용할 필요가 없습니다. 대신 입력 숫자를 낮은 값에서 높은 값으로 반복합니다. 각 자리 위치에 대해 먼저 1000....000이 출력 표현 (10의 10의 이전 거듭 제곱)에 포함되도록 계산하십시오. 그 결과를 숫자로 곱하고 출력 표현에 누적하십시오.

출력 표현에서 곱셈과 덧셈을 수행하는 루틴이 필요합니다. 곱셈 루틴은 추가 루틴의 관점에서 작성할 수 있습니다.

예 :

베이스 (3) 246 (베이스 (10))로 변환.

"accumulator"출력을 초기화하여 시작 a = "0".

"승수"m = "1"을 초기화하십시오.

또한 출력 표현에서 10은 "101"입니다.

첫 번째 자릿수는 d = "20" 인 6입니다.

  • 곱하기 : t = d * m = "20" * "1" = "20".
  • 누적 : a = a + t = "0" + "20" = "20".
  • 업데이트 배율 : m = m * "101" = "1" * "101" = "101".

둘째 자리 d = "11" 4이다.

  • 곱하기 : t = d * m = "11" * "101" = "1111".
  • 누적 : a = a + t = "20" + "1111" = "1201".
  • 업데이트 배율 : m = m * "101" = "101" * "101" = "10201".

셋째 자리 d = "2" 인 2이다.

  • 곱하기 : t = d * m = "2" * "10201" = "21102".
  • 누적 : a = a + t = "1201" + "21102" = "100010".

따라서 답변은 "100010"입니다.

+0

코드는 여기에서 찾을 수 있습니다. http://www.codeproject.com/KB/recipes/BaseConverter.aspx –

+0

몇 가지 예를 들어 설명해 주시겠습니까? 왜냐하면 나는 노력하고 있기 때문에, 그러나 할 수 없다. – Spinach

+0

@user : 내 업데이트 된 답변보기. –