[英]Why does this simple C program hang up?
int getCycleLen(int n){//counts the number of iterations before n=1
int cycle_len=0;
while(n!=1){
if(n%2==0) n/=2; else n=3*n+1;
cycle_len++;
}
return cycle_len;
}
int main(){
int i,j,n;
int max_len=0,len;
i = 1; j = 1000000;//j = a million
for(n=i;n<=j;n++){
printf("%d ",n);
len = getCycleLen(n);
if(len > max_len)
max_len=len;
}
printf("%d %d %d\n",i,j,max_len);
}
我正在使用Ubuntu 16.04并使用gcc 5.4进行编译。 由于某些原因,当for循环的n为113299时,程序将挂起。有关此现象的任何建议?
这是整数溢出。 请将参数long
用作getCycleLen
。
如果在getCycleLen
进行迭代时打印n
每个值,则可以自己getCycleLen
。 当数字太大而无法容纳int
,它将溢出并变为负数。 负数将不会收敛于1。
在C语言中,整数有特定的限制。 此限制取决于系统的体系结构。 但基本上,您的值已经超出了整数存储的最大可能值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.