面试题32 整数中1出现的次数(从1到n整数中1出现的次数)

题目描述

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
 1 class Solution {
 2 public:
 3     int NumOf1(const char* strN){
 4         if (!strN || *strN < '0' || *strN > '9' || *strN == '\0'){
 5             return 0;
 6         }
 7         int first = *strN - '0';
 8         unsigned int l = static_cast<unsigned int>(strlen(strN));
 9         if (l == 1 && first == 0)
10             return 0;
11         if (l == 1 && first > 0)
12             return 1;
13         int numberFirst = 0;
14         if (first > 1)
15             numberFirst = pow(10, l - 1);
16         else if (first == 1)
17             numberFirst = atoi(strN + 1) + 1;
18         int numberOther = first * (l - 1) * pow(10, l - 2);
19         int numberRecur = NumOf1(strN + 1);
20         return numberFirst + numberOther + numberRecur;
21     }
22     
23     int NumberOf1Between1AndN_Solution(int n)
24     {
25         if (n < 0){
26             return 0;
27         }
28         char strN[50];
29         sprintf(strN, "%d", n);
30         return NumOf1(strN);
31     }
32 };

 

posted @ 2016-04-06 09:08  早杰  阅读(146)  评论(0编辑  收藏  举报