我编写了一个C ++程序来查找所有自守数字(在正方形的最后数字中重复的数字,例如 5x5 = 2 5 , 76x76 = 57 76 )从1到111,111。该程序运行正常,但它没有给出90625和109376.代码如下:
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
long int square;
int a, sum = 0, result, b;
for (int i = 1; i < 111111; i++) {
result = 1;
b = i;
while (b > 0){
b = b / 10;
result = result * 10;
}
square = i * i;
a = square % result;
if(i == a){
sum = sum + i;
cout << i << endl;
}
}
cout << sum << endl;
return 0;
}
答案 0 :(得分:1)
Long int只有4个字节
long 4 bytes -2,147,483,648 to 2,147,483,647
unsigned long 4 bytes 0 to 4,294,967,295
90625和109376的平方分别为8,212,890,625和11,963,109,376 。因此,当值溢出时,您将无法在long int limit中生成这两个值。您可以使用整数类型long long
。
long long 8 bytes –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned long long 8 bytes 0 to 18,446,744,073,709,551,615
如果你想使用更大的数字,你可以使用Arrays
来处理它们,或者让像GMP这样的库来处理更大的数字。