用C语言解决数字 1 的个数问题

数字 1 的个数
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。

示例 1:

输入:n = 13
输出:6
示例 2:

输入:n = 0
输出:0
提示:

0 <= n <= 10^9


#include <stdio.h>
#include <algorithm>
using namespace std;

int countDigitOne(int n) {
    int res = 0;
    for (long long k = 1; k <= n; k *= 10)
    {
        long long i = k;
        res += (n / (i * 10)) * i + min(max((n % (i * 10)) - i + 1, 0LL), i);
        i *= 10;
    }
    return res;

}

int main()
{
    int n;
    scanf("%d", &n);
    int res = countDigitOne(n);
    printf("%d\n", res);
    return 0;
}

img