塌先生这个题目看似简单,其实蛮难的。主要是后面不是一个完整的数段,而是截止到200620062006了,这样就必须要重新推算从200000000000到200620062006只见有多少个零出现。
我的算法是:
考虑到0-9这是个数字是顺序出现的,所以每个数位上0出现的频率是相同数位的所有自然数的1/10。解释一下就是0在10-99这90个数的个位出现9次,在100-999这900个数中,个位出现90次,十位出现90次。由此得出一个公式:
零在所有某位数中出现的次数=(数位-1)*9*10^(数位-2)。带入数位得到:
零在所有个位数中出现的次数=(1-1)*9*10^(1-2)=0
零在所有两位数中出现的次数=(2-1)*9*10^(2-2)=1*9*10^0=9
零在所有三位数中出现的次数=(3-1)*9*10^(3-2)=2*9*10^1=180
。。。
零在所有十一位数中出现的次数=(11-1)*9*10^(11-2)=10*9*10^9=90,000,000,000
由于十二位数截止到200620062006,因此上面的公式只能算到99,999,999,999,从100,000,000,000到200,620,062,006就不适用了。
不过从100,000,000,000到199,999,999,999还是很容易算出来的,所有的0出现的次数=(12-1)*1*10^(12-2)=11*1*10^10=110,000,000,000。
比较麻烦的是从200,000,000,000到200,620,062,006,目前我还不知道怎么推出公式,如果硬算的话就太麻烦了。那位朋友有更好的方法?还请不吝赐教!
|