对于任意大于1 的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。输入n,输出变换次数。输入范围0~10^9。
int main()
{
int n,count=0;//count计数
cin >> n;
while (n != 1)
{
if (n % 2 == 1) n = 3 * n + 1;
else n = n / 2;
count++;
}
cout << count << endl;
return 0;
}
在输入接近10^9的奇数时,会出现明显错误,因为3*n+1将会超过int的范围而第一次计算就会溢出,书中使用的条件会使<=1时退出循环,则只会有一次计算,其结果小于零,而我的代码所给条件为==1,则没有结果,会一直运行下去
Int数据类型范围大致 -2147483648~2147483647 有十位
对此用long long int/long long来存储n即可解决此问题
浮点型数据存储方式 符号位 小数位(.1234567……) 指数位
其分配并不一定,但其精度可知
字节数 有效数字
Float 4 6
Double 8 15
Lone double 8 15
16 19