[编程之美]1的数目

View Code
 1 //Solution1:对1到n的每个数进行拆分
2 int Solution(int n)
3 {
4 int count=0;
5 for(int i=1;i<=n;++i)
6 {
7 j=i;
8 while(j)
9 {
10 if(j%10==1)
11 count++;
12 j=j/10;
13 }
14 }
15 return count++;
16 }
17
18 //考虑n每一位c的情况
19 /*
20 if c==0 1的个数为高位数*权值
21 else if c==1 1的个数为高位数*权值+低位数+1
22 else 1的个数为(高位数+1)*权值
23 */
24 int Solution(int n)
25 {
26 int count=0;
27 int factor=1;
28 int lower=0;
29 int higher=0;
30 int current=0;
31 while(n/factor)
32 {
33 current=(n/factor)%10;
34 lower=n-factor*(n/factor);
35 higher=n/(factor*10);
36 switch(current)
37 {
38 case 0:
39 count+=higher*factor;
40 break;
41 case 1:
42 count+=higher*factor+lower+1;
43 break;
44 default:
45 count+=(higher+1)*factor;
46 break;
47 }
48 factor*=10;
49 }
50 return count;
51 }

 

posted @ 2012-03-26 14:29  Cavia  阅读(204)  评论(0编辑  收藏  举报