[英]Functions with very big numbers in C++
我对C ++相当陌生,并且一直在尝试编写一个程序来处理很大的输入数字(7e + 11 ish)。 数量少时效果很好,但数量大时效果不好。 我意识到这是因为很大的数字不适合int,但是当我尝试其他类型(如__int64,long long int,unsigned long long int和uint64_t)时,“ nextsmallestfactor”函数不起作用(通常输出0和因此在除以a(输出)时会触发错误。 那我该怎么用呢? 该代码应取一个大数字,将其重复除以每次均除以最小的数字,最后输出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;
}
非常感谢您的帮助。
问题是,如果给函数一个质数,则代码从不实际返回值,因此会产生未定义的行为。 当我们输入素数时,让我们写出循环的迭代:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.