Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 巴贝奇&x27;带C++;没有显示出适当的结果_C++ - Fatal编程技术网

C++ 巴贝奇&x27;带C++;没有显示出适当的结果

C++ 巴贝奇&x27;带C++;没有显示出适当的结果,c++,C++,我被问到了一个问题来寻找巴贝奇数(一个平方以269696结尾的数,例如99736的平方是9947269696,因此是巴贝奇数)。下面是我在C++中的实现。它没有提供预期的结果。第一个结果是正确的,但是后面的结果不是。我可能认为这与铸造或变量超出范围有关。但是在检查unsigned long int的范围时,我无法理解我的代码有什么问题 #include<iostream> using namespace std; int main(int argc, char **argv){

我被问到了一个问题来寻找巴贝奇数(一个平方以269696结尾的数,例如99736的平方是9947269696,因此是巴贝奇数)。下面是我在C++中的实现。它没有提供预期的结果。第一个结果是正确的,但是后面的结果不是。我可能认为这与铸造或变量超出范围有关。但是在检查
unsigned long int
的范围时,我无法理解我的代码有什么问题

#include<iostream>

using namespace std;

int main(int argc, char **argv){

    unsigned long long square = 0;

    for(int i = 519; i < 100000; i++){

        square = i*i;    

        if(square % 1000000 == 269696)
            cout<<"Number: "<<i<<", Square: "<<square<<endl;

    }

}
我确实看到正方形也不准确,但我不明白为什么

这是巴贝奇的电话号码

25264 99736 150264 224736 275264 349736 400264 474736 525264 599736 650264 724736 775264 849736 900264
974736

变量
i
是一个
符号int
。由于例如
99736*99736
无符号int
在所有通用平台上都能处理的大得多,因此乘法会导致算术溢出,对于有符号整数类型,会导致未定义的行为


您还需要将
i
设置为
无符号long

变量
i
是一个
有符号int
。由于例如
99736*99736
无符号int
在所有通用平台上都能处理的大得多,因此乘法会导致算术溢出,对于有符号整数类型,会导致未定义的行为


您还需要将
i
设置为
无符号长

您必须将变量
i
的数据类型从
有符号整数
更改为
无符号整数
。您得到的数字平方是错误的,因为

size\u t square=0;
对于(尺寸i=519;i<100000;i++){
平方=i*i;
如果(平方%1000000==269696)

不能必须将变量
i
的数据类型从
有符号整数
更改为
无符号整数

size\u t square=0;
对于(尺寸i=519;i<100000;i++){
平方=i*i;
如果(平方%1000000==269696)

无法更改
int i
变量
无符号长i
的类型

当您计算某些范围的
int*int
乘法时,超出int的范围可能会导致未定义的行为

#包括
使用名称空间std;
int main(int argc,字符**argv){
无符号长平方=0;
for(无符号长i=519;i<100000;i++){
平方=i*i;
如果(平方%1000000==269696)

无法更改
int i
变量
无符号长i
的类型

当您计算某些范围的
int*int
乘法时,超出int的范围可能会导致未定义的行为

#包括
使用名称空间std;
int main(int argc,字符**argv){
无符号长平方=0;
for(无符号长i=519;i<100000;i++){
平方=i*i;
如果(平方%1000000==269696)

考虑到所有通用平台上的
unsigned int
都是32位,第二个巴贝奇数远远超过九十亿,这还不够。考虑到所有通用平台上的
unsigned int
都是32位,第二个巴贝奇数远远超过九十亿,这还不够。
Number: 25264, Square: 638269696
Number: 119328, Square: 1354269696
Number: 158816, Square: 18446744073162269696
Number: 186992, Square: 606269696
Number: 188008, Square: 987269696
Number: 331424, Square: 18446744071882269696
Number: 439080, Square: 18446744073227269696
size_t square = 0;

for(size_t i = 519; i < 100000; i++){
    square = i*i;    
    if(square % 1000000 == 269696)
        cout<<"Number: "<<i<<", Square: "<< square <<"\n";
}