求一个数字中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。