回 帖 发 新 帖 刷新版面

主题:帮忙!

题目:求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个回复)

沙发

答:你的程序有问题。来分析一下看:

n=1
m=1
在下面没有使用,相反,使用了
for n=1 to 20
for m=1 to 20
前面两行就没有任何意义。

内层循环,每一次,计算出一个阶乘p,并加入到sum里
仅内层就已经足够完成题目的要求了
你的外层循环又是做什么的?

至于溢出的问题,各计算机的要求不同,如果不能定义高精度数值(或者连高精度都不够用)的话,就请把数值作为字符串来处里。

板凳

题目:求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 楼

题目:求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 楼

在你的程序中最后输出的旧是你要求的。
如果你想一同输出每个数的阶乘,可以修改程序如下:
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 楼

是不是我的第一个程序是对的,但是太冗余了?

6 楼

加入[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 楼

暂时还看不懂

8 楼

楼主在5楼的观点是不对的。不只是多余,而且直接造成计算结果的错误。
我想你的关键问题是在于“循环中各变量的变化过程”。这个理解并不太难,只需要设定义个5次左右的循环,手工(千万不要用计算机,会妨碍你的理解)列表计算过程中各变量的变化,就会有一个深刻的理解。以后就基本不会发生这类问题。

我来回复

您尚未登录,请登录后再回复。点此登录或注册