整数中1出现的次数(从1到n整数中1出现的次数)

题目描述

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

代码

class Solution {
public:
    int NumberOf1Between1AndN_Solution(int n)
    {
    	//分别统计每个位上出现1的个数,
        //当b位上的数k为0时,该为上1的个数为 (n/(10^b))*(10^(b-1))
        //当b位上的数k为1时,该为上1的个数为 (n/(10^b))*(10^(b-1)) + n % (10^b)
        //当b位上的数k大于1时,该为上1的个数为 (n/(10^b) + 1)*(10^(b-1))
        int ans = 0;
        int base = 1, k, remain, num = n;
        while (num) {
            k = num % 10;
            num = num / 10;
            remain = n % base;
            
            ans += num * base;
            if (k > 1) {
                ans += base;
            } else if (k == 1) {
                ans += remain + 1;
            }
            
            base *= 10; 
        }
        return ans;
    }
};
原文地址:https://www.cnblogs.com/jecyhw/p/6586005.html