yufei113 发表于 2009-1-11 13:02:00

[求助]帮忙看哈子了,一个作业题。。。。

<p></p><p>加载运行时候输入30、50后则出现乘积为负数的结果,怎么回事?小弟想不出来哈~~~~</p>

ZZXXQQ 发表于 2009-1-11 13:51:00

看不明白?是不是阶乘?

caoyin 发表于 2009-1-11 13:52:00

<p>把你的问提取出来。当repeat第9次的时候就相当于执行下面的运算:</p><p>(* 398808576 39)</p><p>但不知为什么产生的是负数?</p>

liu_kunlun 发表于 2009-1-11 16:00:00

超过了长整型数的正数表达范围,(* 398808576. 39)就可得到正确结果

yufei113 发表于 2009-1-11 16:05:00

<p>比如输入A=1,B=100则结果为0</p><p>这样才是超出了范围吧?我认为超出范围返回结果为0,不能是负数吧?</p>

liu_kunlun 发表于 2009-1-11 16:33:00

<p>是整型数超范围引起的。这样处理:</p><p>&nbsp; (repeat nn<br/>&nbsp;&nbsp;&nbsp; (setq cj (* 1. cj num_cr));此句修改<br/>&nbsp;&nbsp;&nbsp; (setq num_cr (1+ num_cr))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; (prin1)<br/>&nbsp; (setq str1(strcat"A="(itoa num_s)))<br/>&nbsp; (setq str2(strcat"B="(itoa num_e)))<br/>&nbsp; (setq str3(strcat"乘积="(rtos cj 2 0)));此句修改</p>

yufei113 发表于 2009-1-12 18:50:00

本帖最后由 作者 于 2009-1-12 18:50:27 编辑 <br /><br /> liu_kunlun发表于2009-1-11 16:33:00static/image/common/back.gif是整型数超范围引起的。这样处理:&nbsp; (repeat nn&nbsp;&nbsp;&nbsp; (setq cj (* 1. cj num_cr));此句修改&nbsp;&nbsp;&nbsp; (setq num_cr (1+ num_cr))&nbsp;&nbsp;&nbsp; )&nbsp; (prin

<p>多谢多谢,先转换成实数,再用rtos转化为字符串输出。。。</p>
页: [1]
查看完整版本: [求助]帮忙看哈子了,一个作业题。。。。