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 };