溢出问题

/*猜想对于任意大于1的自然数n,若n为奇数,
则将n变为3n+1,否则将n变为一半,求变换的次数  其中n<10^9
开始不用长整形的时候会溢出,但是还可以用double解决这个问题刘汝佳
教我的*/
/*
//法1  长整形法
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    __int64 n,count = 0;
    while(scanf("%I64d",&n)!=EOF)
    {
        while(n>1)
        {
            if(n%2==1)
                n=n*3+1;
            else
                n/=2;
            count++;
        }
        printf("%I64d\n",count);
        count=0;
    }
    return 0;
}*/
//法2   double法
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    int count = 0;
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        while(n>1)
        {
            if(n%2==1)
            {
                n=(double)n/2*3+1;
                count+=2;
                continue;
            }
            else
                n/=2;
            count++;
        }
        printf("%d\n",count);
        count=0;
    }
    return 0;
}

 

posted @ 2012-11-05 17:02  myth_HG  阅读(202)  评论(0编辑  收藏  举报