31.整数中出现一的个数——剑指offer

题目描述

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
 1 class Solution {
 2 public:
 3     int NumberOf1Between1AndN_Solution(int n)
 4     {    
 5             int count = 0;//计数
 6             int temp = 0;//保存该位之前的数
 7             int i = 1;//用于计算当前位之前和之后数的大小
 8             while(n > 0)
 9             {   
10                 int a = n%10;//当前位上的数
11                 n = n / 10;//该位之前数的大小
12             if(a >= 1)
13             {
14                 if(a > 1) count = count + n * i+ i;//
15                else count = count + n*i + temp +1;
16               
17             }
18            else count = count + n*i ;
19                temp = temp + a*i;
20                i=i*10;
21             }
22         return count;
23     }
24 };

 

posted @ 2019-05-25 23:06  unique_ptr  阅读(101)  评论(0编辑  收藏  举报