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);
}