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时程序挂起。有关为什么会发生这种情况的任何建议吗?
答案 0 :(得分:3)
这是一个整数溢出。使用$output = $this->renderPhpFile($viewFile, $params);
代替参数long
。
如果您在getCycleLen
中进行迭代时打印n
的每个值,则可以自行查看。当数字太大而无法放入getCycleLen
时,它会溢出并成为负数。负数将不会收敛于1。
答案 1 :(得分:0)
在C中,整数具有特定限制。此限制取决于系统的体系结构。但基本上你的值已溢出存储在整数的最大可能值。