【问题描述】 一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个0,1,2,…,9。其中—个页码不含多余的0,如N=1234时第5页不是0005,只是5。 【输入】 一个正整数N(N≤109),表示总的页码。 【输出】 共十行:第k行为数字k-1的个数。 【样例】 count.in count.out 11 1 4 1 1 1 1 1 1 1 1 【算法分析】 可以从连续数字本身的规律出发来进行统计,这样速度比较快,先不考虑多余的0的情况,假设从0000~9999,这一万个连续的数,0到9用到的次数都是相同的,一万个四位数,0到9这十个数字共用了40000次,每个数字使用了4000次。 进一步推广,考虑所有的n位数情况,从n个0到n个9,共10n个n位数,0到9十个数字平均使用,每个数字共用了n*10n-1次。 以n=3657为例:(用count数组来存放0到9各个数字的使用次数) {zg}位(千位)为3,从0千、1千到2千,000~999重复了3次,每一次从000到999,每个基本数字都使用了3*102=300次,重复3次,所以count[0]~count[9]各增加3*300; 另外{zg}位的0到2作为千位又重复了1000次,count[0]~count[2]各增加1000,3作为千位用了657次(=n mod 100),因此count[3]增加657; 每一位要做三件事情:(4236) 1、count[0]到count[9]的平均数。4236应该是(4×1000*3)/10。(4次,每次都是3位数) 2、0到该位数-1,都重复了10的位数-1次方。4236,0-3都增加1000次。 3、改位数值4要加上后面的236次。 {zh1}再减去多算的0的个数。 那么0到底多算了多少次呢? 当没有十位及以更高位 |