저는 C++을 처음 접했고 매우 큰 입력 번호 (7e + 11 ish)를 처리하는 프로그램을 작성하려고했습니다. 그것은 작은 숫자로 잘 작동하지만 큰 것들로는 작동하지 않습니다. 이것은 매우 큰 숫자가 int에 맞지 않기 때문입니다. 그러나 __int64, long long int, unsigned long long int 및 uint64_t와 같은 다른 유형을 시도하면 "nextsmallestfactor"함수가 작동하지 않습니다 (일반적으로 0을 출력 함). 따라서 a로 나누면 오류가 발생 함). 그럼 내가 무엇을 사용해야합니까? 이 코드는 큰 숫자를 취하고 매번 나눌 숫자가 가장 작은 숫자로 반복적으로 나눠서 끝에 가장 높은 소수 요소 인 a를 출력합니다.C++에서 매우 큰 숫자가있는 함수
#include <iostream>
using namespace std;
int numberToFactorise = 700000000000;
int nextsmallestfactor(int numbertofactorise){
for (int factor = 2; factor < numbertofactorise; factor++){
if (numbertofactorise%factor == 0){
return factor;
}
}
}
int main(){
int quotient = numberToFactorise;
int a=1;
while (quotient > 1){
a = nextsmallestfactor(quotient);
quotient = quotient/a;
};
cout << a;
cout << endl;
system("PAUSE");
return 0;
} 어떤 도움 주셔서 대단히
감사합니다.
우리가 입력 소수가 루프의 반복을 작성할 수 있습니다 int의 최대 크기는 2,147,483,647 – andre
입니다. nextsmallestfactor()의 모든 코드 경로가 값을 반환하지는 않지만, 조건을 'factor <= numbertofactorise'로 변경하면 x % x == 0이므로 모든 값은 하나의 반복에 대해 if 문이 true 여야합니다. – clcto
'int64_t'처럼 더 큰'int' 타입을 사용합니다. "내 기능이 작동하지 않습니다"... 잘 작동하지 않는 것을 알아 내야합니다. 함수에 문제가 있더라도'int64_t'를 사용했다는 사실과 아무 관련이 없습니다. – AnT