计算从1到正整数n中,出现多少次给定的数(0到9)

输入一个[0-9]之间的数字m,统计出从1开始到正整数n中的数字的序列里,一共出现多少次这个数字。

基本思路
考虑在十进制下,n的每一位可能出现多少次m。
举个例子:
若要求1到153中出现多少次2,153/10=15,说明当个位为2时,至少由15数处在这个范围内,002,012,022,032...,142
为什么说时至少呢?因为2<3,即152也处在这个范围内,所以个位数一共出现16次2。
百位,千位同理。

参考代码

def ff(x, num):
    m, ans = 1, 0
    while x // m > 0:
        h, mod = divmod(x, m * 10)
        cur, l = divmod(mod, m)
        if cur > num:
            ans += h * m + m
        elif cur == num:
            ans += h * m + l + 1
        else:
            ans += h * m
        m *= 10
    return ans
int f(int n, int m)
{
    int ans = 0;
    int base = 1;
    while (n / base)
    {
        int h = n / (base * 10);
        int mod = n % (base * 10);
        int l = mod / base;
        int res = mod % base;
      //将数字拆成3部分,h表示左边的部分,l表示枚举到的那一位(中间那部分),res表示右边剩下的那部分
        if (l > m)
            ans += h * base + base;
        else if (l == m)
            ans += h * base + res + 1;
        else
            ans += h * base;
        base *= 10;
    }
    return ans;
}
posted @ 2022-11-16 20:58  何太狼  阅读(310)  评论(0)    收藏  举报