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

思路:寻找规律可以发现,对于个位,数字1每隔10出现1次;对于十位,数字1每隔100出现1次;对于百位,数字1每隔1000出现100次;...对于不完整的部分,比如15,只需要对10取余加1即可。综上,变量有间隔次数和出现次数,同时要注意不完整部分,可以利用辗转相除的思想。

def NumberOf1Between1AndN_Solution(self, n):
    # write code here
    temp = n
    res = 0
    base = 1#出现次数
    while temp:
        p = temp % 10#不完整部分
        temp = temp / 10
        res += temp * base#乘出现次数
        if p == 1:
            res += n % base+1
        elif p > 1:
            res += base
        base*=10
    return res