繁体   English   中英

为什么这个简单的C程序挂断了?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM