例题:整数中出现1的个数
前沿: 这个题目做过两次了,但是还是没怎么懂,比较模糊,现在将这个题目记录下来,方便后面自己再来进行攻克。
方法1:按照位数来进行计算实际的1的个数
class Solution {
public:
int NumberOf1Between1AndN_Solution(int n) {
//0-9 1
//0 100 10 + 10
//0-1000 10*20 + 100
//0-10000 300*10 + 1000
// sum = 10*sum_n + 10/100/1000
int cnt = 0;
for(int m=1;m<=n; m*=10){
int a = n/m, b = n %m;
cnt += (a+8) / 10 * m + (a%10==1?b+1:0);
}
return cnt;
}
};