永发信息网

3n+1定律 c语言

答案:4  悬赏:30  手机版
解决时间 2021-11-29 01:51
3n+1定律 c语言
最佳答案
关键在
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较大时可能变为负数,好在不影响奇偶判断
全部回答
你用了 double , double 转int 精度就会有损失 。所以他会在while里面死循环。

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

用double肯定行不通的。
long的范围为-2147483648~2147483647满足10^9,所以定义n时用long试试,计算机运行浮点运算肯定没有整数快的
别用double类型了,改为int , int n;
后面的也改一下:
while(n > 1 && n <= MAX)
{
if(n % 2 == 1)

n = n * 3 + 1;

else

n /= 2;

count++;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
穿41码鞋还能伸进去两个手指要穿多大的鞋
登岗镇的介绍
仙剑四真的有隐藏剧情吗
最近奶奶的耳朵听不好,哪里可以比较好的看耳
有友凤爪的辣椒是什么椒,好辣
蒜蓉花蛤的做法步骤图,蒜蓉花蛤怎么做好吃
今年暑假,请教一下准高三如何逆袭,本人是一
征集高手对联,对句:穷且益坚,好男儿不坠青
阅读“四五”运动时悼念周恩来的一首诗:欲悲
秦池至尊38度一瓶的一箱六瓶多少钱
想找一集死神 请问打虚老大的·打到后面那里
brobor什么牌子山地车好不好!
28x72的积在( )与( )之间 接近( )
防雷措施和防雷装置有哪些
一次能吃几只螃蟹
推荐资讯
“寒日下西原”见唐人诗句
258条的规定,犯重婚罪的,处以多长时间
一款毛绒玩具打八圻出售。小玉算了一下,如果
阅读下列短文,根据短文中的信息完成文后表格
阳澄湖大闸蟹(南通崇川区濠东路220-9)地址在
请问谁知道JanesongJS-666型万能电视机遥控器
GAMEOVER是什么意思?
我是火命头朝哪个方向睡觉好
Black man和man in black有区别吗
仙逆王林会练丹吗
527x35简便运算怎么算?
戊戌辛酉癸酉庚申男求有缘人祥批八字,十神格
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?