永发信息网

3n+1定律 c语言

答案:4  悬赏:30  手机版
解决时间 2021-11-29 01:51
  • 提问者网友:饥饿走向夜
  • 2021-11-28 16:40
3n+1定律 c语言
最佳答案
  • 五星知识达人网友:慢性怪人
  • 2021-11-28 17:13
关键在
while(n > 1)
{
if((int)n % 2 == 1) n = n*3+1;
else n /= 2;
count++;
}
这一块

由于n是double类型,之前运算过程中由于运算误差可能会使n变为小数,如1.0000000000000004
接下来会*3+1变成4.0000000000000018(再次出现运算误差),再除两次2又成了1.0000000000000004
由于1.0000000000000004>1,于是在while(n > 1) 里出不来了

解决办法:将while(n > 1) 改为while(n >1.5)

另外,注意(int)n当n较大时可能变为负数,好在不影响奇偶判断
全部回答
  • 1楼网友:逃夭
  • 2021-11-28 20:27
你用了 double , double 转int 精度就会有损失 。所以他会在while里面死循环。

改成int 再试试,不行的话,换__int64 这个类型。

用double肯定行不通的。
  • 2楼网友:舍身薄凉客
  • 2021-11-28 20:02
long的范围为-2147483648~2147483647满足10^9,所以定义n时用long试试,计算机运行浮点运算肯定没有整数快的
  • 3楼网友:行路难
  • 2021-11-28 18:48
别用double类型了,改为int , int n;
后面的也改一下:
while(n > 1 && n <= MAX)
{
if(n % 2 == 1)

n = n * 3 + 1;

else

n /= 2;

count++;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯