C ++에서 나머지 대량 부서를 찾는 방법은 무엇입니까?

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

  •  19-09-2019
  •  | 
  •  

문제

C ++의 모듈러스에 관한 질문이 있습니다. 내가하려고했던 것은 매우 많은 숫자를 나누는 것이 었습니다. 예를 들어 M % 2, 여기서 M = 54,302,495,302,423. 그러나 컴파일에 갈 때 숫자는 int의 '긴'이라는 것을 말합니다. 그런 다음 두 배로 전환하면 동일한 오류 메시지를 반복합니다. 내가이 일을 할 수있는 방법이 있습니까? 도와 주셔서 감사합니다. 대단히 감사합니다.

도움이 되었습니까?

해결책

C ++의 많은 산술에 대해서는 GMP 도서관. 특히, mpz_mod 기능은 이것을 할 것입니다.

보다 자연스러운 C ++ 래퍼를 위해 mpz_class 클래스는 Multiprecision 작업에 운영자 과부하를 제공하여 도움을 줄 수 있습니다.

다른 팁

숫자를 "긴 길이"(64 비트 적분 값)로 저장할 수 있습니다. 응용 프로그램이 멀티 스레드가 있고 32 비트 CPU에서 실행되면 읽기/쓸 때 스레드간에 동기화해야합니다. 읽기/쓰기에 2 클럭 사이클이 걸리는 값.

또는 a를 시도하십시오 Bignum 라이브러리

흥미로운 일을하고 싶다면 모듈로 2 만 수행한다면 가장 낮은 비트를 확인하고 답을 얻을 수 있습니다. Modulo 255까지 만 수행하는 경우 가장 낮은 8 (부호없는 Char) 비트를 가져 와서 작업을 수행 할 수 있습니다. Modulo 65535까지 만 수행하는 경우 가장 낮은 16 비트 (서명되지 않은 짧음)를 가져 와서 작업을 수행 할 수 있습니다.

INT는 –2,147,483,648에서 2,147,483,647입니다. 확인하다http://msdn.microsoft.com/en-us/library/s3f49ktz(vs.71).aspx 데이터 유형 범위의 경우. 나는 긴 시간을 추천합니다.

힌트 : 링크 된 목록을 사용하십시오. 숫자를 동적으로 숫자 그룹으로 저장하십시오. 예를 들어 :

112233445566778899001122 => 11223344 55667788 99001122

이제 개별 장치를 고려하고 왼쪽에서 오른쪽으로 시작하십시오. 미리 알림을 찾고 다음 그룹에 추가하고 계속하십시오.

이제 구현은 매우 쉽습니다 :)

편집하다:

112233445566778899001122/6 =>  11223344 55667788 99001122/6


 11223344/6 =>2

 2*100000000 + 55667788 = 255667788
 255667788/6 => 0
 0*100000000 + 99001122 = 99001122
 99001122/6=>0

 So the reminder is 0.

조작 후 개별 장치는 지원할 수있는 최대 범위에 속해 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top