c++在命令行执行,显示到113381后无法继续,是电脑设置的原因吗?
程序如下,程序应该没问题
#include<iostream>
using namespace std;
int main(int argc, char* [])
{
int n=1,m;
while(n<=10000000)
{
m=n;
while(m!=1)
{
if(m%2==0)
m=m/2;
else
m=3*m+1;
}
cout<<n<<endl;
n=n+2;
}
return 0;
}
[解决办法]
额 刚才花了点时间在调试你这个程序,不知道你为什么会设计这个程序哦,当n=113381+2后也就是下一次循环为113383时,m此时也是113383,但是不知道是这个数字巧合还是怎么的,这个我没求证,m继续运行时会增加到827370449,然后会执行m=m*3+1这句话,执行这句话的时候827370449*3+1超出int类型的范围,此时m就会变成一个负数,这个还可以理解,但是执行到最后到-17的时候问题出现了,此后m的值会在
-17 -50 -25 -74 -37 -110 -55 -164 -82 -41 -122 -61 -182 -91 -272 -136 -68 -34 -17····这个几个数字之间循环变化,永远不会出现m=1的情况,造成程序的死循环