易码技术论坛

 找回密码
 加入易码
搜索
查看: 122904|回复: 4

[计算求助]请优化求数字和的方法

[复制链接]
发表于 2005-8-16 09:37:00 | 显示全部楼层
我先把我的思路说说从0算到9是45 从10算到19是10个1加0算到9就是1*10+45 同样的20到29就是2*10+45 那么从0算到99是0*10+45+1*10+45+2*10+45+……+9*10+45 所以是(0+1+2+……+9)*10+45*10=45*10+45*10 同样的从100到199比0到99多了100个1就是1*100+45*10+45*10 那么从0到999就是(0+1+2+……+9)*100+(45*10+45*10)*10=45*10^2+90*10^1 同里从0到9999就是45*10^3+90*10^2 从0到999……9(n个9)就是45*10^(n-1)+90*10^(n-2) 这就是我的研究思路
发表于 2005-8-16 14:50:00 | 显示全部楼层
我做过一个,很简单,转一下POKE进内存再GOTO就行了.加减乘除等等都行,又快.
但这好像不是正常的方法......
 楼主| 发表于 2005-8-17 10:19:00 | 显示全部楼层
我说的是在电脑上,而且要算很大数字
以下是后续思路
假设有个数a(n)a(n-1)…a(2)a(1)[设为p]
我们从第n位计算起
由于从0到99……9[n-1个9]是有公式可以一步计算出来的[设计算结果为k],那么我们可以利用k来计算从0到(a(n)-1)99……9[n-1个9前面是a(n)-1],其实从0到我们截止的这个数,0到99……9[n-1个9]是重复出现的,所不同的是前面的数字不同,那么0到我们截止的这个数中k出现了几次呢,答案是a(n)次,比如3214中,0到999出现了3次,同时,第n位上的数字各自又出现了10^(n-1)次,比如0到299百位的1出现了100次,2也出现了100次,所以从0到我们截止的这个数的数字和应该是a(n)*k+(1+2+…+a(n)-1)*10^(n-1)[结果1],但是第n位上还有些数字没有算完,从我们截止的这个数到p这其中a(n)出现了a(n-1)a(n-2)…a(2)a(1)+1次,
所以可以计算出数字和是a(n)*val(right$(ltrim$(str$(p)),n-1))[结果2]
计算出结果1和结果2后,剩下来的就是计算从0到a(n-1)a(n-2)…a(2)a(1)的数字和
这又可以用刚刚上面哪个方法了,(这是递归还是嵌套?我不记得定义了)
这就是我上面代码的原理,可是我的代码老是出问题
 楼主| 发表于 2005-8-17 10:21:00 | 显示全部楼层
下面的是qb代码,大家帮忙看看
DIM s#
INPUT a: s# = 0
t$ = LTRIM$(STR$(a)): t = LEN(t$): DIM p%(t)
FOR i = t TO 1 STEP -1
p(i) = VAL(MID$(t$, i, 1))
NEXT i
FOR j = t TO 2 STEP -1
IF p(j) = 0 THEN GOTO a
IF p(j) = 1 THEN
  s# = s# + p(j) * 45 * (j - 1) * 10 ^ (j - 2) + VAL(RIGHT$(t$, j - 1)) + 1
ELSE
  k = p(j) * (p(j) - 1) / 2
  s# = s# + p(j) * 45 * (j - 1) * 10 ^ (j - 2) + k * 10 ^ (j - 1) + (VAL(RIGHT$(t$, j - 1)) + 1) * p(j)
END IF
a: NEXT j
PRINT s# + (1 + p(1)) * p(1) / 2

大家帮帮忙吧
 楼主| 发表于 2005-8-16 09:30:21 | 显示全部楼层 |阅读模式
输入一个数
求从1到该数的所有数的各个数位上的数字的和
原来的算法是用2重循环,里面的拆数字,累加,外面再总的累加一遍,但这种方法效率太低,上了百万后计算时间就长了点
请各位大侠研究个新算法
最好算到亿都是几秒中,当然拉,得从数学入手,研究出公式,,来一次性计算,避免循环

上面说的是在电脑上运行的,请大家不要拘泥于星星的内存什么的
这里只讨论算法,希望畅所欲言
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-8-24 02:14 , Processed in 0.014165 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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