以下程序统计区间 [L, R] 中,数字 k (0 ≤ k ≤ 9) 在所有数字各位上出现的次数。例如 [1, 12] 中,数字 1 出现了 5 次(1, 10, 11(2次), 12)。
#include <iostream>
using namespace std;
long long countDigit(long long n, int k) {
long long cnt = 0;
long long factor = 1;
while (n / factor != 0) {
long long curr = (n / factor) % 10;
long long higher = n / (factor * 10);
long long lower = n % factor;
if (curr < k) {
cnt += higher * factor;
} else if (curr == k) {
cnt += higher * factor + lower + 1;
} else {
cnt += (higher + 1) * factor;
}
if (k == 0) { // ②
③;
}
factor *= 10;
}
return cnt;
}
int main() {
long long L, R;
int k;
cin >> L >> R >> k;
long long ans = countDigit(R, k) - countDigit(①, k);
cout << ans << endl;
return 0;
}
①处应填( )
L
L - 1
L + 1
R - L