今天,看了入門經典的書,然後我覺得3n+1的改進那裏有點問題,貼一下代碼吧!
#include <stdio.h> 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 <stdio.h> 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; }