今天,看了入门经典的书,然后我觉得3n+1的改进那里有点问题,贴一下代码吧!

#include 
int main(){ long n,count = 0; scanf("%d",&n); while(n > 1) { if(n & 1) { n=3*(n-1)/2+2; count+=2; } else { n/=2; count++; } } printf("%d\n",count); return 0;}

问题主要是:在这里如果换成long long,结果就会有问题。对于这个问题,我一直觉得百思不得其解。

后来,在询问了以后发现原来是输入有问题:重新贴一下代码吧!

#include 
int main(){ __int64 n; int count = 0; scanf("%I64d",&n); while(n > 1) { if(n & 1) { n=3*(n-1)/2+2; count+=2; } else { n >>= 1; count++; } // printf("%d",n); } printf("%d\n",count); //printf("%d\n",sizeof(long long)); return 0;}