题目内容
编写一个程序,求1!+2!+…+10!的值(其中n!=1×2×3×…×n).
分析:这个问题可以用“WHILE+ WHILE”循环嵌套语句格式来实现.
程序结构要做到如下步骤:
①处理“n!”的值;(注:处理n!的值的变量是一个内循环变量)
②累加“n!”的值.(注:累加n!的值的变量是一个外循环变量)
显然,通过10次循环可分别求出1!、2!、…、10!的值,并同时累加起来, 可求得S的值.而求T=n!,又可以用一个循环(内循环)来实现.
解:程序为:
s=0
i=1
WHILE i<=10
j=1
t=1
WHILE j<=i
t=t*j
j=j+1
WEND
s=s+t
i=i+1
WEND
PRINT s
END
思考:上面程序中哪个变量是内循环变量,哪个变量是外循环变量?
解答:内循环变量:j,t.外循环变量:s,i.
上面的程序是一个的“WHILE+WHILE”型循环嵌套语句格式.这是一个比较好想的方法,但实际上对于求n!,我们也可以根据求出的(n-1)!乘上n即可得到,而无需重新从1再累乘到n.
程序可改为:
s=0
i=1
j=1
WHILE i<=10
j=j*i
s=s+j
i=i+1
WEND
PRINT s
END
显然第二个程序的效率要比第一个高得多.第一程序要进行1+2+…+10=55次循环,而第二程序进行10次循环.如题目中求的是1!+2!+…+1 000!,则两个程序的效率区别会更明显.
点评:解决具体的构造循环语句的算法问题,要尽可能地少引入循环变量,否则较多的变量会使得设计程序比较麻烦,并且较多的变量会使得计算机占用大量的系统资源,致使系统缓慢.另外,也尽可能使得循环嵌套的层数少,否则也浪费计算机的系统资源.

练习册系列答案
相关题目