1 題目及要求
1.1 題目描述
求從1到正整數n這n整數的十進制表示中1出現的次數。例如輸入12, 從1到12包含1的數字有1,10,11,12共出現了5次。
2 解答
2.1 代碼
int numberOf1(int n){
if(n<1) return 0;
int basen(1),base(10),num(0);
while(!(n<base)){ // 求位數和對應的基數值
base*=10;
++basen;
}
base /= 10;
// 先求n/base+1到n的1的個數
num = 1<n/base ? base:1+n%base; // 最高位1的個數
num += n/base * (basen-1)*base/10; // 其他位1的個數
// 再求1到n/base的1的個數
return num + numberOf1(n%base);
}