我是C ++的新手,并且一直在尝试编写一个程序来处理非常大的输入数字(7e + 11 ish)。它适用于少量数字,但不适用于这些大数字。我意识到这是因为非常大的数字不适合int,但是当我尝试其他类型如__int64,long long int,unsigned long long int和uint64_t时,函数“nextsmallestfactor”不起作用(它通常输出0和所以当用a,输出除以时会触发错误。那我应该怎么用?这段代码应该取一个大数字,重复除以每次除以它的最小数字,最后输出一个最高的素数因子。
#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;
}
非常感谢您的帮助。
答案 0 :(得分:4)
问题在于,如果为函数提供素数,则代码实际上不会返回值,因此会产生未定义的行为。让我们在输入素数时写出循环的迭代:
nextsmallestfactor( 5 ):
factor | numbertofactorise % factor
----------------------------
2 | 5%2 = 1
3 | 5%3 = 2
4 | 5%4 = 1
END (no return)
如果您更改条件以检查因子直到并包括 numbertofactorize
,那么它将执行:
nextsmallestfactor( 5 ):
factor | numbertofactorise % factor
----------------------------
2 | 5%2 = 1
3 | 5%3 = 2
4 | 5%4 = 1
5 | 5%5 = 0 ---> return 5;
答案 1 :(得分:1)