您的位置:首页 > 其它

求一个数字中1的个数

2015-06-04 19:58 351 查看
输入一个整数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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: