码迷,mamicode.com
首页 > 其他好文 > 详细

十进制的正整数,其中出现“1”的个数

时间:2015-06-04 13:31:19      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

一、题目要求:

           给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。

           要求: 写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。

           例如 f(12) = 5。 在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。

 

二、解题思路:

           通过对几个特定数的分析,寻找规律,比如:“10”=1+1;“13”=2+4;“123”=3+1+53……

           先将个位上的“1”算出,再算十位上的“1”,最后再算出百位上的“1”,然后再加起来即可。

三、C++代码:

 1 #include<iostream>
 2 #include<math.h>
 3 using namespace std;
 4 
 5 void find(int n)
 6 {
 7     int m=n,a,b,c,s=0,p=0;   //n是要求的十进制正整数  
 8     double k=0;                                
 9     while(m/10!=0)           
10     {
11         a=m/10;           //a为n的十位数
12         b=m%10;           //b为n的个位数
13         if(k==0)
14         {
15             if(b==0)
16             {
17                 s+=a;
18             }
19             else
20             {
21                 s=s+a+1;
22             }
23         }
24         else
25         {
26             if(b==1)
27             {
28                 s=s+(n/pow(10,k+1))*10+n%(int)pow(10,k);
29             }
30             else if(b==0)
31             {
32                 s=s+n/pow(10,k);
33             }
34             else
35             {
36                 p=n/pow(10,k+1);
37                 s=s+(p+1)*10;
38             }
39         }
40         m=m/10;
41         k++;
42     }
43     if(m==1)
44     {
45         c=n-m*pow(10,k);
46         s=s+c+1;
47     }
48     else
49     {
50         c=pow(10,k);
51         s=s+c;
52     }
53     
54     cout<<s;          // s为“1”的总和
55 }
56 
57 void main()
58 {
59     int i;
60     cout<<"请输入一个十进制的正整数:";
61     cin>>i;
62     cout<<endl;
63     cout<<"‘1‘出现的个数为:";
64     find(i);
65     cout<<endl;
66 }

四、截图:

技术分享

技术分享

技术分享

 

五、实验总结:

           通过这次实践,在考虑问题方面,需要逐步逐层地分析,先从简单问题入手,运用化归的数学思想,将问题慢慢转化为自己能够解决的问题,而不是从终端开始,很麻烦的解决问题。

十进制的正整数,其中出现“1”的个数

标签:

原文地址:http://www.cnblogs.com/itlangguojie/p/4551444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!