求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。

其实这道题目需要比较深刻的数学归纳计算法进行计算,才能够用几行代码就可以解决。
个位数上的1的个数:(n/10)1 + if(n%10)<1?0:((n%10-1)+1)
*
十位数上的1的个数:(n/100)10 + if(n%100)<10?0:((n%100-10)+1)
*
百位数上1的个数:
(n/1000)100 + if(n%1000)<100?0:((n%1000-100)+1)
*
总计i:*(n/(10i))i + if(n%(10i))< i ?0:((n%(10*i)-i)+1)
i是小于n的最高位数目:i=pow(10, log10(n))

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        if(n <= 0)return 0;
        int count = 0;
        for(int i=1; i <= n; i*=10){
            //计算在第i位上总共有多少个1
            count = count + (n/(10*i))*i;
            //不足i的部分有可能存在1
            int mod = n%(10*i);
            //如果超出2*i -1,则