阅读量:5
题目:
题解:
int countDigitOne(int n) { // mulk 表示 10^k // 在下面的代码中,可以发现 k 并没有被直接使用到(都是使用 10^k) // 但为了让代码看起来更加直观,这里保留了 k long long mulk = 1; int ans = 0; for (int k = 0; n >= mulk; ++k) { ans += (n / (mulk * 10)) * mulk + fmin(fmax(n % (mulk * 10) - mulk + 1, 0LL), mulk); mulk *= 10; } return ans; }