class Solution {
public:
int NumberOf1Between1AndN_Solution(int n)
{
int vsum = 0;
int nn = n;
int Md = 1;
while(n != 0){
int pv = n%10;
int prev = n/10;
Md *= 10;
n /= 10;
if(pv == 0){
vsum += (nn/Md) * Md/10;
}else if(pv == 1){
if(Md == 10){
//特判当个位为1的情况
vsum += (nn/Md)* Md/10 + 1;
}else{
vsum += (nn/Md)* Md/10 + (nn%(Md/10)+1);
}
}else{
vsum += ((nn/Md) + 1) * Md/10;
}
}
return vsum;
}
};
原文:https://www.cnblogs.com/chengsheng/p/10669807.html