2016-09-08 2 views
4

나는 매우 많은 수 있습니다square_root 매우 많은 수의 때까지 <1000

나는 그것이 PHP에서 < 1000을 때까지이 숫자 평방 응원을 유지하려면
char *big_numbr_str = "4325242066733762057192832260226492766115114212292022277"; 

, 나는 비교적 쉽게 할 수 있습니다 :

while($num > 1000): 
    $num = sqrt($num); 
endwhile; 

$num = floor($num); 

저는 이제 C에서 같은 결과를 얻으려고합니다. 참고로, while 루프에서 5 사이클 후에 PHP의 위 코드와 시작 숫자의 최종 결과는 50입니다. 이 숫자를 다른 곳에 5 번 제곱근하면 비슷한 결과가 나오게됩니다.

평범한 C에서 어떻게 같은 결과를 얻을 수 있습니까? 이 크기의 숫자를 저장하는 것이 예상보다 C에서 더 복잡합니다.

답변

4

이와 같은 숫자를 처리하려면 큰 번호의 라이브러리가 필요합니다. Linux에서는 GMP을 시도 할 수 있습니다.

또는 bigint 루틴을 직접 작성하고 제곱근을 수동으로 구현할 수 있습니다. 기본적으로 한 번에 모든 숫자를 손으로 계산해야하기 때문에 제대로 구현하려면 시간이 걸립니다. 그것은 끝낼 수 있습니다 (나는 해냈습니다), 그러나 그것은 "간단하지 않습니다".

+0

char에 저장된 숫자로 제곱근 처리의 "비교적 간단한"수학을 수행 할 수 있습니까? – Tiago

+0

네, 할 수 있습니다 : 문자열의 왼쪽 절반을 받아 일부 수정합니다. 나머지 부분이 <1000 (<4 charcters)이 될 때까지 반복하십시오. – wildplasser

+0

GMP와 호환됩니다. 감사합니다! 비록 GMP를 연결하지 않고 원시 C 방식이 있다면 나는 여전히 관심이있다. – Tiago

0

큰 정수 (4325242066733762057192832260226492766115114212292022277)를 저장하려면 array of integers을 사용할 수 있습니다. 요소 당 하나의 숫자를 저장하십시오. 배열은 단일 정수처럼 작동해야합니다. 종이에서하는 것처럼 계산을 수행하는 루틴을 작성하십시오.

또는 google 을 입력하고 큰 정수 계산을 구현하는 라이브러리를 찾을 수 있는지 확인하십시오. Steven Skiena의 MPFRMPIR과 같은 라이브러리에서 bignum.c을 살펴보십시오.

관련 문제