정말 큰 숫자를 바이너리에서 소수점으로 변환하고 인쇄하십시오.

StackOverflow https://stackoverflow.com/questions/960264

문제

이진을 소수로 변환하는 방법을 알고 있습니다. 나는 적어도 두 가지 방법을 알고있다 : 테이블과 힘 ;-)

바이너리를 소수로 변환 하고이 소수점을 인쇄하고 싶습니다. 더욱이, 나는이 '소수점'에 관심이 없다. 나는 그것을 인쇄하고 싶다.

그러나 위에서 쓴 것처럼 바이너리를 소수로 변환하는 방법은 2 가지만 알고 있으며 둘 다 추가해야했습니다. 따라서 바이너리에서 1 또는 0에 대한 값을 계산하고 기억 된 값에 추가합니다. 이것은 얇은 곳입니다. 나는 정말로 큰 숫자 (1 및 64 0)를 가지고 있습니다. 변환하는 동안 일부 중간 결과를 '변수'로 배치해야합니다. C에는`int '유형이 있으며,이 유형은 4 바이트이며 10^11 이하입니다.

따라서 이진에서 소수로 변환하면서 중간체 결과를 저장하기에 충분한 메모리가 없습니다. 위에서 쓴 것처럼, 나는 그 소수점에 관심이 없으며 결과를 인쇄하고 싶습니다. 그러나, 나는 그것을 해결하는 다른 방법을 보지 못합니다.

아니면 중간 표현을 위해 BCD (Binary Coded Decimal)와 같은 것을 사용해야합니까? 나는 이것을 사용하고 싶지 않습니다. 왜냐하면 그것은 크로스 플랫폼이 아니기 때문입니다 (Intel의 프로세서에는 내장 기능이 있지만 다른 경우 자체 구현을 작성해야합니다).

나는 당신의 생각을 듣고 기쁩니다. 인내심에 감사드립니다.

언어 : C.

도움이 되었습니까?

해결책

가장 큰 표준 적분 데이터 유형입니다 unsigned long long int - 내 시스템 (x86의 32 비트 리눅스)에서는 0-1.8*10^20 범위가 충분하지 않으므로 자신만의 유형 (구조 또는 배열)을 만들고 기본 수학을 작성해야합니다 (기본적으로 당신은 단지 당신은 단지 당신입니다. 해당 유형에 추가)이 필요합니다.

내가 너 (그리고 기억이 문제가되지 않는다면), 배열을 사용한다. BCD는 바이트 당 2 진수 숫자를 저장하기 때문에 더 컴팩트하지만, 높은 니블과 함께 더 많은 노력을 기울여야합니다.

그리고 당신을 인쇄하려면 그냥 추가하십시오 '0' 배열의 모든 바이트에 (숫자가 아닌 문자) 인쇄 가능한 문자열이 나타납니다.

다른 팁

다음과 같은 라이브러리를 사용하는 것이 좋습니다 GMP (GNU Multiprecision 라이브러리). 당신은 사용할 수 있습니다 mpz_t 큰 정수의 데이터 유형, 다양한 수입/내보내기 루틴 데이터를 얻으려면 mpz_t, 그런 다음 사용합니다 mpz_out_str() 베이스 10에서 인쇄하려면.

글쎄, 이진에서 소수점으로 변환 할 때, 당신은 동시에 모든 바이너리 비트가 필요하지 않습니다. 현재 전력을 계산하는 비트와 결과를 보유하려면 이중 변수가 필요합니다. 이진 값을 배열에 넣을 수 있습니다. [64], 반복을 반복하고, 위치에 따라 전원을 얻고 계속 더블에 추가합니다.

10 진수로 변환한다는 것은 실제로 10의 각 전력을 계산하는 것을 의미하므로 바이트 배열에 이것을 저장하지 않겠습니까? 그런 다음 인쇄는 배열을 통해 단지 루핑됩니다.

5 개의 int에 대한 메모리를 할당하고 배열의 시작 부분에 번호를 저장할 수 없습니까? 그런 다음 int 크기의 덩어리로 배열을 수동으로 반복하십시오. 아마도 : 아마도 :

int* big = new int[5];
*big = <my big number>;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top