1、1~200这200个连续自然数的全部数字之和是________。
2、2,4,6,……,2008这些偶数的所有各位数字之和是________。
这两道题算易错吧,这里求数字之和,比如124这个数的全部数字之和是1+2+4=7。
两题数学解题思路一样,数字之和,数字无非就是0-9这10个数,要求和0可以忽略,所以就是1-9这九个数。那么我们只要算出每个数出现几次就可以了。
第一题:
1出现在个位数的情况有,1,11,21,...191,所以一共有(0,1,2,19)组一共出现20次。
同理2-9也是20次,所以个位数所有数字和为(1+2+...+9)*20=900。
1出现在十位数的情况有:(10,11,...19),(110,111,...119)两组,一组10个数,所以也出现20次。
同理2-9也是20次,所以十位数所有数字和为(1+2+...+9)*20=900。
1出现在百位数的情况有,100,101...199一共100次。
2出现在百位数的情况只有200一个。
所以百位数所有数字和为100*1+2=102。
综上,1~200这200个连续自然数的全部数字之和是:900+900+102=1902。
第二题:
个位数只能是偶数,所以:
2出现在个位数的情况有2,12,22,...2002,所以一共有(0,1,2,...200)组一共有201次。
同理4,6,8出现在个位数的情况为201次,所以所有个位数字之和为201*(2+4+6+8)=4020。
十位数开始可以奇数了,所以从1开始算:
1出现在十位数的情况有:(10,12,14,16,18),(110,112,114,116,118)...(1910,1912,19141916,1918),一共有(0,10,20...190)共20组5个数,也就是一共出现100次。
同理2,9也是100次,所以十位数所有数字和为(1+2+...+9)*100=4500。
1出现在百位数的情况有:(100,102,...198)(1100,1102,...1198)一共2组50个数,所以一共出现100次
同理2-9在百位也各出现100次,所以百位数所有数字和为(1+2+...+9)*100=4500。
1出现在千位数的情况有1000,1002,1004...1998一共出现500次
2出现在千位数的情况有2000,2002,...2008一共出现5次。
3-9没在千位数出现,所以千位数所有数字和为500*1+5*2=510。
综上,2,4,6,……,2008这些偶数的所有各位数字之和是4020+4500+4500+510=13530。
以上是数学的解法,下面用编程python的解法,python的解法主要是利用遍历每个数的所有数字和。代码如下:
第一题:
n = 0
r = 0
while n < 200:
n = n + 1
r = r + n % 10 #累加所有个位数
if 9 < n < 100:
r =r + n // 10#累加所有两位数的十位数
if n >= 100:
r = r + n // 100 + n //10 % 10#累加所有三位数的百位数+十位数
print(r)
第二题:
n = 0
r = 0
while n < 2008:
n = n + 2
r = r + n % 10 #累加所有个位数
if 9 < n < 100:
r = r + n // 10#累加所有两位数的十位数
if 100 <= n < 1000:
r = r + n // 100 + n // 10 % 10 #累加所有三位数的百位数和十位数
if n >= 1000:
r = r + n // 1000 + n // 100 % 10 + n // 10 % 10 #累加所有四位数的千位数+百位数+十位数
print(r)