为什么我的代码不给出最后两个数字?

时间:2017-04-16 09:53:54

标签: c++ numbers

我编写了一个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;
}

1 个答案:

答案 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这样的库来处理更大的数字。