百数表规律以及解题。
小学一年级学习了百数表。百数表在解题中非常有作用。首先我们要整理出来百数表数字规律。
从图一看出:
- 从0-99,1-9这9个数字每个出现了20次,0出现了10次。
从图二看出:
- 如果给1-9这9个个位数每一个数字前面补一个0,那么在数表中,0-9每个数字出现的次数都是一样的,都是20次。
从图3看出:
- 数表被对角线,0-11-22-33-...-99分为2部分。对角线上方的数字个位数字比十位数字大。
典型题解
- 50以内的两位数,个位数比十位数大的有几个?
利用百数表求解
1+2+3+4+5+6+7+8= 36
- 100以内的数字所有数位相加求和
- 所谓数位相加,指每一位分别相加。例如10,11两个数数位相加就是1+0+1+1=3
- 按照上面的总结,如果给1-9这9个个位数每一个数字前面补一个0,那么在数表中,0-9每个数字出现的次数都是一样的,都是20次。
- 所以100以内的数字所有数位相加求和就是20个1-9求和。1-9数字求和为45
- 最后:20X(1+2+3+4+5+6+7+8+9+0) = 900
- 1到2008的每个数字的所有数位相加的和是多少?
- 与上题类似,我们先看一下100-199的情况,发现与图一相比,数位多了1,那么100-199数位求和与0-99数位求和相比,就是多了100个1
- 以此类推200-299数位求和,多了100个2
- ...
- 900-999数位求和,多了100个9
- 所以0-999数位求和就是900 + (900+100) + (900+200) + ... + (900+900)= 9000 + 100X(1+2+3+4+..+9)= 9000+4500 =13500
- 1000-1999求和,比0-999数位求和多了1000个1,所以1000-1999数位求和就是13500+1000=14500
- 2000-2008数位求和= 2x8 + 1+2+3+4+5+6+7+8 = 16+36 = 52
- 最终结果是13500+14500+ 52 = 28052
另外一种解法:
- 从上述
如果给1-9这9个个位数每一个数字前面补一个0,那么在数表中,0-9每个数字出现的次数都是一样的,都是20次。
- 我们发现这个规律放到0-99也是一样的,如果把0-99每个数字前面补0,那么000-999,每个数字出现的次数是一样的,一共3000个数字,0-9分别出现了300次,所以0-999数位求和就是300x45=13500
- 1000-1999求和,比0-999数位求和多了1000个1,所以1000-1999数位求和就是13500+1000=14500
- 2000-2008数位求和= 2x9 + 1+2+3+4+5+6+7+8 = 18+36 = 54
- 所以最终结果是13500+14500+ 54 = 28054
数位相加的程序解法
非递归解法
function sum(number) {
var s=0;
for(digits=0;digits<=number;digits++){
tmp = digits;
do{
s+=tmp%10;
}while(tmp=parseInt(tmp/10));
}
return s;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
递归解法
function sum(digits){
if(digits<9){
return digits;
}else{
return digits%10 +" + " + sum(parseInt(digits/10));
}
}
function sumAll(digits){
var s=0;
for(var i=0;i<=2008;i++){
s = s+sum(i);
}
return s;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14