您的位置:首页 > 其它

溢出问题

2012-11-05 17:02 169 查看
/*猜想对于任意大于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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: