求一个数字中1的个数

输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。

如18出现了1 10 11 12 13 14 15 16 17 18 总计10次 

 例如一个5位数x=48292

 万位数  10000-19999共有10000个

 千位数  5*(1000)此时万位数的取值可以是0 1 2 3 4 共5个所以有5种

 百位数  00100-48292 共有100*49

  十位数 00010-48292 共有482*10

 个位数4830*1

总计10000+5000+4900+4820+4830

规律

c >1: 00 1 00 -- ab 1 99,共计 (ab+1)*100种,其中(ab+1)表示万千位可以取00-ab,共计ab+1种。因为c>1所以 ab199<abcde,所以这些数都是在1 -- abcde范围内。

 

c=0:  00 1 00 -- a (b-1) 1 99, 总共有ab*100种,而a(b-1)200-ab099之间,都没有百位=1的数字出现了。

 

c=1:  我们可以把c = 1的数字分成以下2种情况之和

 

             00 1 00 -- a(b-1)1 99 :总共ab * 100种可能性;

 

a(b-1) 2 00 -- ab 0 99:这段数字中百位=1的的数字数目为0;

 

              ab 1 00 -- ab 1 cd:共计cd+1种可能性;

 

所以c =1的数字数目,等于c=0的数字数目,加上abcde%100 +1。

 

posted @ 2015-06-04 19:58  马思勉  阅读(371)  评论(0编辑  收藏  举报