問題陳述:計數的1的中的整數的總數從1到N
給定一個整數n,計數數字1的總數量出現在所有非負整數小於或等於n。
例如: 給定n = 13, 返回6,因爲位1時發生在以下數字:1,10,11,12,13,
有效解:
int countDigitOne(int n) {
if (n <= 0) return 0;
int q = n, x = 1, ans = 0;
do {
int digit = q % 10;
q /= 10;
ans += q * x;
if (digit == 1) ans += n % x + 1;
if (digit > 1) ans += x;
x *= 10;
} while (q > 0);
return ans;
}
我的問題:
我找到了解決問題的論壇之一,我發現很難理解的解決方案。我瞭解它很簡單,但請詳細解釋我的幫助。
謝謝