从1到n整数中1出现的次数
题目描述
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
感觉《剑指offer》上没有讲清楚,还是《编程之美》上的思路清楚:
![](https://images2017.cnblogs.com/blog/1261599/201712/1261599-20171228104338144-182942467.png)
个位和十位的情况和百位是一样的,代码如下:
1 class Solution { 2 public: 3 int NumberOf1Between1AndN_Solution(int n) 4 { 5 int count=0; 6 int factor=1; 7 int lowerNum=0; 8 int currNum=0; 9 int higherNum=0; 10 while(n/factor) 11 { 12 lowerNum=n%factor; 13 currNum=(n/factor)%10; 14 higherNum=n/(factor*10); 15 switch(currNum) 16 { 17 case 0: 18 count+=higherNum*factor; 19 break; 20 case 1: 21 count+=higherNum*factor+lowerNum+1; 22 break; 23 default: 24 count+=(higherNum+1)*factor; 25 break; 26 } 27 factor=factor*10; 28 } 29 return count; 30 } 31 };