入門筆記上面的3n+1問題的思考

 今天,看了入門經典的書,然後我覺得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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章