角谷猜想求助~~~
新手求助,角谷猜想:对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个整数,将经过处理得到1的过程输出来。
我的程序是:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
unsigned long long int n = 0;
scanf("%d",&n);
while(n != 1)
{
if(n % 2)
{
printf("%u*3+1=%u\n",n,n*3+1);
n = n*3+1;
}
else
{
printf("%u/2=%u\n",n, n/2);
n /= 2;
}
}
printf("End"
return 0;
}
输入159487的时候,输出不正确,求大神指点~
输出里面有这一行:
1699000271*3+1=802033518 出错 返回小木虫查看更多
来人解释一下呗~~~
额,来个人指点一下呗~
1699000271*3=5097000813=5*10^9,是不是越界了?你选一个更大的数试试,是不是也出错。这个那个瀑布数吗?
,
我猜是%u能够输出的位数有限,unsigned long long 需要用其它格式来输出