明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1251|回复: 6

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

[复制链接]
发表于 2009-1-11 13:02:00 | 显示全部楼层 |阅读模式

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2009-1-11 13:51:00 | 显示全部楼层
看不明白?是不是阶乘?
发表于 2009-1-11 13:52:00 | 显示全部楼层

把你的问提取出来。当repeat第9次的时候就相当于执行下面的运算:

(* 398808576 39)

但不知为什么产生的是负数?

发表于 2009-1-11 16:00:00 | 显示全部楼层
超过了长整型数的正数表达范围,(* 398808576. 39)就可得到正确结果
 楼主| 发表于 2009-1-11 16:05:00 | 显示全部楼层

比如输入A=1,B=100则结果为0

这样才是超出了范围吧?我认为超出范围返回结果为0,不能是负数吧?

发表于 2009-1-11 16:33:00 | 显示全部楼层

是整型数超范围引起的。这样处理:

  (repeat nn
    (setq cj (* 1. cj num_cr));此句修改
    (setq num_cr (1+ num_cr))
    )
  (prin1)
  (setq str1(strcat"A="(itoa num_s)))
  (setq str2(strcat"B="(itoa num_e)))
  (setq str3(strcat"乘积="(rtos cj 2 0)));此句修改

 楼主| 发表于 2009-1-12 18:50:00 | 显示全部楼层
本帖最后由 作者 于 2009-1-12 18:50:27 编辑

liu_kunlun发表于2009-1-11 16:33:00是整型数超范围引起的。这样处理:  (repeat nn    (setq cj (* 1. cj num_cr));此句修改    (setq num_cr (1+ num_cr))    )  (prin

多谢多谢,先转换成实数,再用rtos转化为字符串输出。。。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-29 13:38 , Processed in 0.197629 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表