int countDigitOne(int n) {
int ones = 0;
for (long long m = 1; m <= n; m *= 10) {
ones += (n / m + 8) / 10 * m + (n / m % 10 == 1) * (n%m + 1);
//其实原公式为: ones += [(n / m + 8) / 10 * m - ones] + [((n / m % 10 == 1) * (n%m + 1)) + ones]
//意思就是每次统计高一位为1的情况加上当本位为1时的特殊情况
}
return ones;
}
妙妙屋-求小于n的所有正整数中1的个数
最新推荐文章于 2025-05-07 14:00:35 发布