整数中1出现的次数(从1到n整数中1出现的次数)

题目描述

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
 1 /**
 2  * 
 3  * @author gentleKay
 4  * 题目描述
 5  * 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?
 6  * 为此他特别数了一下1~13中包含1的数字有1、10、11、12、13
 7  * 因此共出现6次,但是对于后面问题他就没辙了。
 8  * ACMer希望你们帮帮他,并把问题更加普遍化,
 9  * 可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
10  */
11 
12 public class Main31 {
13 
14     public static void main(String[] args) {
15         // TODO Auto-generated method stub
16         int sum = Main31.NumberOf1Between1AndN_Solution(14);
17         System.out.println(sum);
18     }
19 
20     public static int NumberOf1Between1AndN_Solution(int n) {
21         int sum = 0;
22         for (int i=1;i<=n;i++) {
23             sum = sum + Count(i);
24         }
25         
26         return sum;
27     }
28     
29     public static int Count(int i) {
30         int count = 0;
31         String s = String.valueOf(i);
32         for (int j=0;j<s.length();j++) {
33             char ch = s.charAt(j);
34             if (ch == '1') {
35                 count++;
36             }
37         }
38         return count;
39     }
40 }
原文地址:https://www.cnblogs.com/strive-19970713/p/11160252.html