回 帖 发 新 帖 刷新版面

主题:求数字和(符合要求的回答都给30分)

这里的数字和与数和是2码事
题目是这样的
输入一个数,求从1到该数的所有数的数字的和
例如:输入12
应该求1+2+3+4+5+6+7+8+9+1+0+1+1+1+2
一般的解决方案是把每个数拆开,然后慢慢算,但这种方法效率低,算到上千万时就要花点时间了,我想用数学方法总结规律来做,可是我的那个方法对于整百,整千,整万……的算不出来,只有各个数位都不为0时才可以算,不过速度超快,算几十万那么多时间,几十亿也是那么多时间


请各位大侠不吝赐教!!!!!!!!!!!!
30分啊,你不心动么?呵呵

回复列表 (共32个回复)

沙发

先顶了

板凳

[em2]

3 楼

可笑

4 楼

如果说循环求和的话,mod 9就可以了
但这只是单次求和,不过也不难

但楼主说的整百整千就有问题
1000 不可以等于 999+1 吗?

5 楼

但是我那种算法不是1000=999+1这回事
因为算里不一样的
对了,你们理解题目意思了么
意思是求从1到x的各个数的各个数位上的数字和
用2循环可以解决,但效率非常低,就想问问大家找个效率高的算法

6 楼

input n
for i=1 to n
  p=i
  do
   s=s+p mod 10
   p=p\10
  loop until p=0
next i
print s
[em9]

7 楼

先把1 到10 相加
再把十位以上mod 10再以一个数组相加再输出就行了

8 楼

input n
if n<=0 then
for i=1 to n
let p=i
do
let s=s+p mod 10
let p=p\10
loop while p<>0
next i
print s
endif
end

9 楼

n<=0??????

10 楼

以“编程黑客”做的为最正统
def 不知道为什么要加一个小于等于0的判断?

我说的999+1的意思是,你既然能算非整百整千的数
那就可以算999的数,加上1不就是得数了吗?
f(1000)=f(999)+f(1)

这道题很简单,数字相加而已
我举个例子  134

这个数该怎么算?
首先算个位上出现的所以数字的和
上面的次数有什么规律?
从1到9总共出现了多少次
当个位数是1时,高位数从0到13总共出现了14次
当个位数是2时,.......
.....
当个位数是5时,高位数从0到12总共出现了13次
...

再算十位数上的数字
从十位数是1时,高位数从0到1总共出现了2次
     个位数从0到9出现了10次,也就是2*10=20次
...
当十位是3的时候,高位数是0时候,个位数从0到9出现了10次
                 高位数是1时候,个位数从0到4出现了5次

剩下的自己再想一想该怎么处理解决

我来回复

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