回 帖 发 新 帖 刷新版面

主题:请教算法的问题

我遇到一道例题如下:
求1/1!+1/2!+1/3!+。。。。。+1/100!的和
请问高手这类题的详细解答过程是怎么的?作为新人应该怎么去思考?欢迎新手共同讨论学习,更欢迎高手的讫临指导.

回复列表 (共15个回复)

沙发

你没有打错字吧?求1/1!+1/2!+[color=FF0000]3[/color]/3!+。。。。。+1/100!的和
这道题,说来不难。但要做好,尽量减少运算就有些技巧了
第一,总体来看,是一个累加过程。
在看每一项,都是前一项除以该项的序号。
所以,可以编写程序如下:
s=0
k=1
for i=1 to 100
k=k/i
s=s+k
next i
? s
end

全部程序就这样,代码不多,运算也不多。
一共304步操作。

板凳

请问,你运行过吗?

3 楼

答二楼:我的机器没有安装qb,所以…………
有什么话就直说吧

4 楼

运行正确

5 楼

我今天上班的时候想了想 我是这样思考的:
分两个过程,一是求每个分母的阶乘  二是把每项加起来
于是我就这样:
t=1:i=1:s=0
do while i<=100
t=t*i           '求分母的阶乘
s=s+1/t         '求每一相的累加和
i=i+1
loop
print s
现在我才下班到家 还没来得及验证哈
我是新手还希望大虾们多指点

6 楼

1/1!+1/2!+1/3!+。。。。。+1/100!的和
也可以用子程序做~
CLS
S=0
FOR I=1 TO 100
  GOSUB 100
  S=S+1/T
NEXT I
PRINT S
END
100:
T=1
FOR J=1 TO I
  T=T*J
NEXT J
RETURN
我没运行,不知道对不对

7 楼

看不懂子程序,不过还是支持下,较满意,我也后学了子程序再去验证下,我要努力争取在九月顺利过二级.不知道我的那种方法怎么样?请高手裁决下我的算法的缺点,那些需要改进的?还有更简洁的方法没有?

8 楼

使用子程后程序的效率降低很多!共调用子程100此,做乘法(1+99)*100/2=5000次,而不是用子程,乘法只计算99次或100次!
效率,是程序的生命!

9 楼

看了以上那么多的纸上谈兵.
我忍不住要说几句.

1. 题目中的叹号!估计是阶乘的意思,应该不是QB里的单精度后缀吧,
   一楼对数学很拿手
   阶乘放在VB里是一个很简单很小的好程序,
   但在QB里,阶乘超过35的,都溢出
   而一楼的程序刚好避开了这个问题,的确很不错.
   只是不能一下子看得出来.

2. 使用子程后程序的效率降低很多!
   六楼的程序里,只是使用不当,而且还会溢出,但不能说是子程序的过错.
   效率这东西要看时间空间的优先.
   很多的时候相互会有转化和牺牲.
   现代不再推荐使用gosub的子程,而应该多用结构化的SUB子程或函数FUNCTION

10 楼

也许9楼对我在一楼的评价是对的,也许是错的。
实践出真知,斗争长才干!
因为,我的机器没有装qb,所以…………
为了谨慎,我在vb环境下是运行了该代码,才帖上来的
也许两者有所不同。
如果错了,请方家帖出合适的代码;
如果和我一样的坐而论道,嘿嘿,就没有意思了

我来回复

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