主题:求数字和(符合要求的回答都给30分)
jyf1987
[专家分:930] 发布于 2005-08-12 08:51:00
这里的数字和与数和是2码事
题目是这样的
输入一个数,求从1到该数的所有数的数字的和
例如:输入12
应该求1+2+3+4+5+6+7+8+9+1+0+1+1+1+2
一般的解决方案是把每个数拆开,然后慢慢算,但这种方法效率低,算到上千万时就要花点时间了,我想用数学方法总结规律来做,可是我的那个方法对于整百,整千,整万……的算不出来,只有各个数位都不为0时才可以算,不过速度超快,算几十万那么多时间,几十亿也是那么多时间
请各位大侠不吝赐教!!!!!!!!!!!!
30分啊,你不心动么?呵呵
回复列表 (共32个回复)
沙发
jyf1987 [专家分:930] 发布于 2005-08-12 08:53:00
先顶了
板凳
def [专家分:3380] 发布于 2005-08-13 00:45:00
[em2]
3 楼
moz [专家分:37620] 发布于 2005-08-13 13:19:00
可笑
4 楼
moz [专家分:37620] 发布于 2005-08-13 14:37:00
如果说循环求和的话,mod 9就可以了
但这只是单次求和,不过也不难
但楼主说的整百整千就有问题
1000 不可以等于 999+1 吗?
5 楼
jyf1987 [专家分:930] 发布于 2005-08-14 09:01:00
但是我那种算法不是1000=999+1这回事
因为算里不一样的
对了,你们理解题目意思了么
意思是求从1到x的各个数的各个数位上的数字和
用2循环可以解决,但效率非常低,就想问问大家找个效率高的算法
6 楼
编程黑客 [专家分:1660] 发布于 2005-08-14 11:43:00
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 楼
pyh2005 [专家分:40] 发布于 2005-08-14 13:21:00
先把1 到10 相加
再把十位以上mod 10再以一个数组相加再输出就行了
8 楼
def [专家分:3380] 发布于 2005-08-14 17:04:00
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 楼
zqnhlm [专家分:780] 发布于 2005-08-14 21:43:00
n<=0??????
10 楼
moz [专家分:37620] 发布于 2005-08-15 08:37:00
以“编程黑客”做的为最正统
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次
剩下的自己再想一想该怎么处理解决
我来回复