今天,看了入门经典的书,然后我觉得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;
}