NO-31、整数中1出现的次数
题目描述:
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数
例如,1~13中包含1的数字有1、10、11、12、13因此共出现6次
class Solution {
public:
int NumberOf1Between1AndN_Solution(int n) {
if(n<=0)return 0;
if(n<10)return 1;
int high=n,pow=1;//去除最高位以及最高位的权重
while(high>=10){
high/=10;
pow*=10;
}
int last=n-high*pow;//除去最高位的数字
int cnt=high==1?last+1:pow;//high是否为1,最高位的1个数不同
return cnt+high*NumberOf1Between1AndN_Solution(pow-1)+NumberOf1Between1AndN_Solution(last);
}
};