整数中1出现的次数

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。

 1 #include <string.h>
 2 class Solution {
 3 public:
 4     int NumberOf1Between1AndN_Solution(int n)
 5     {
 6         if(n<=0) return 0;
 7         char strN[50];
 8         sprintf(strN,"%d",n);
 9         return NumberOf(strN);
10     }
11     int NumberOf(const char* strN){
12         if(!strN || *strN < '0' || *strN > '9' || *strN == '\0') return 0;
13         
14         int first = *strN - '0';
15         unsigned int length = static_cast<unsigned int>(strlen(strN));
16         if(length == 1 && first == 0) return 0;
17         if(length == 1 && first > 0) return 1;
18         
19         int numFirstDigit = 0;
20         if(first > 1) numFirstDigit = PowerBase10(length-1);
21         else if(first==1) numFirstDigit = atoi(strN + 1) +1;
22         
23         int numOtherDigits = first * (length-1) * PowerBase10(length-2);
24         int numRecursive = NumberOf(strN + 1);
25         
26         return numFirstDigit + numOtherDigits + numRecursive ;
27     }
28     int PowerBase10(int n){
29         int result = 1;
30         for(int i=0; i<n; i++) result *= 10;
31         return result;
32     }
33 };
数字规律

 

posted @ 2016-04-19 15:24  1002liu  阅读(106)  评论(0编辑  收藏  举报