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