매우 큰 정수끼리의 나누기?
글쓴이: Seven.. / 작성시간: 토, 2004/06/12 - 9:25오전
10진수로
한 50자리정수에서 20자리 정수를 나눠야 하는데
이게.. 만만치가 않네요 -_-
어떤 좋은 방법이 있을까요?;;;
나누기가 떨어지는지 아닌지만 판별해도 되거든요....^^
File attachments:
첨부 | 파일 크기 |
---|---|
vnl_bignum_demo.zip | 100.98 KB |
Forums:
한 번만 확인해보시려는거면 bc를 쓰시거나, 혹은 프로그램 내에서의 문제
한 번만 확인해보시려는거면 bc를 쓰시거나, 혹은 프로그램 내에서의 문제라면 GNU MP 라이브러리의 정수 나눗셈 함수들을 쓸 수 있습니다.
--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!
openssl의 BIG_NUM 관련 라이브러리를 사용해 보세요
openssl의 BIG_NUM 관련 라이브러리를 사용해 보세요
큰 정수를 다루는 여러 함수와 구조체를 제공합니다.
Ruby, Python, CMU Lisp 에서 나머지 구하는 것입니다.
Ruby, Python, CMU Lisp 에서 나머지 구하는 것입니다.
http://hj-lee.github.io/
가장 기본적인 bc 를 잊었군요.c++ 에서 GNU MP 사용 예
가장 기본적인 bc 를 잊었군요.
c++ 에서 GNU MP 사용 예 -
결과는
java 에는 java.math.BigInteger
http://hj-lee.github.io/
잠깜 생각해보았는데, 정수를 배열로 저장한다음에, x / y
잠깜 생각해보았는데,
정수를 배열로 저장한다음에,
x / y = z + a
=> x = z * y + a 에서,
x 와 z * y 의 자리수를 먼저 같게 한후,
y 를 바꾸면서 값을 구함.
예1)
9876543210 / 654321 = z + a
=> 9876543210 = z * 654321 + a
=> 9876543210 은 10자리
654321 는 6자리
그러므로, z 는 10000 이 초기 값,
=> 9876543210 > (654321 * 10000 = 6543210000) 이므로,
9876543210 < (654321 * 20000 = 13086420000) 이므로,
z 의 첫번째 수는 1 임을 알수 있고,
9876543210 > (654321 * 11000 = 7197531000)
...
9876543210 > (654321 * 15000 = 9814815000)
9876543210 < (654321 * 16000 = 10469136000) 이므로,
z 의 두번째 수는 5임을 알수 있고,
9876543210 < (654321 * 15100 = 9880247100) 이므로,
z 의 세번째 수는 0 임을 알수 있고,
9876543210 > (654321 * 15010 = 9821358210)
...
...
예2)
9876543210 - (654321*10000) = 3333333210
3333333210 - (654321*10000) = 음수
z 의 첫번째 숫자는 1
3333333210 - (654321*1000) = 2679012210
2679012210 - (654321*1000) = 2024691210
2024691210 - (654321*1000) = 1370370210
1370370210 - (654321*1000) = 716049210
716049210 - (654321*1000) = 61728210
61728210 - (654321*1000) = 음수
z 의 두번째 숫자는 5
....
으로 계속해서 구하면 되지 않을까요?? -.-;;
vnl_bignum 이라는 것이 있습니다.
vnl_bignum 이라는 것이 있습니다.
C++ 클래스이고, 큰 수의 덧셈/뺄셈/곱셈/나눗셈/나머지 연산을 할 수 있습니다.
다만, 저는 Visual C++ 6 에서 돌려 봤고, gcc 에서는 잘 돌아가는지는 모르겠네요. :?
첨부된 소스 파일의 확장자 cxx 는 cpp 로 바꿔서 사용하면 됩니다.
----
블로그 / 위키 / 리눅스 스크린샷 갤러리
댓글 달기