数字 1 的个数
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
示例 1:
输入:n = 13
输出:6
示例 2:
输入:n = 0
输出:0
提示:
0 <= n <= 10^9
数字 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;
}