主题:帮忙!
jyl0716
[专家分:0] 发布于 2006-10-23 13:12:00
题目:求1!+2!+3!+……20!
程序:
DEFDBL A-Z
sum = 0
n = 1
p = 1
m = 1
FOR n = 1 TO 20
FOR m = 1 TO 20
p = p * m
sum = sum + p
NEXT m
NEXT n
PRINT sum
END
请问以上的程序编对了吗???
怎么才能让结果不溢出?
回复列表 (共8个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2006-10-24 11:12:00
答:你的程序有问题。来分析一下看:
n=1
m=1
在下面没有使用,相反,使用了
for n=1 to 20
for m=1 to 20
前面两行就没有任何意义。
内层循环,每一次,计算出一个阶乘p,并加入到sum里
仅内层就已经足够完成题目的要求了
你的外层循环又是做什么的?
至于溢出的问题,各计算机的要求不同,如果不能定义高精度数值(或者连高精度都不够用)的话,就请把数值作为字符串来处里。
板凳
jyl0716 [专家分:0] 发布于 2006-10-24 13:38:00
题目:求1!+2!+3!+……20!
程序:
DEFDBL A-Z
sum = 0
FOR m = 1 TO 20
p = p * m
sum = sum + p
NEXT m
PRINT sum
END
那这个题目这样就行了?
3 楼
jyl0716 [专家分:0] 发布于 2006-10-24 13:40:00
题目:求1!+2!+3!+……20!
程序:
DEFDBL A-Z
sum = 0
p = 1
FOR m = 1 TO 20
p = p * m
sum = sum + p
NEXT m
PRINT sum
END
这样就是只求出了20的阶乘吗???麻烦再解释一下,数学也丢了很久了!
4 楼
老大徒伤悲 [专家分:29120] 发布于 2006-10-24 17:02:00
在你的程序中最后输出的旧是你要求的。
如果你想一同输出每个数的阶乘,可以修改程序如下:
sum = 0
p = 1
print tab(0);"n";tab(25);"n!";tab(40);"1!+..+n!"
FOR m = 1 TO 20
p = p * m
sum = sum + p
print tab(0);m;tab(25);p;tab(40);sum
NEXT m
END
5 楼
jyl0716 [专家分:0] 发布于 2006-10-24 21:36:00
是不是我的第一个程序是对的,但是太冗余了?
6 楼
moz [专家分:37620] 发布于 2006-10-25 12:03:00
加入[url=http://www.programfan.com/club/showbbs.asp?id=99260]超长数运算[/url]里的函数
a$="1"
b$="0"
for i=1 to 20
a$=longx$(a$,str$(i))
b$=longadd$(a$,b$)
next
print b$
7 楼
jyl0716 [专家分:0] 发布于 2006-10-25 13:39:00
暂时还看不懂
8 楼
老大徒伤悲 [专家分:29120] 发布于 2006-10-25 14:21:00
楼主在5楼的观点是不对的。不只是多余,而且直接造成计算结果的错误。
我想你的关键问题是在于“循环中各变量的变化过程”。这个理解并不太难,只需要设定义个5次左右的循环,手工(千万不要用计算机,会妨碍你的理解)列表计算过程中各变量的变化,就会有一个深刻的理解。以后就基本不会发生这类问题。
我来回复