找一

(一)题目:

n给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
n要求:
n写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12)  = 5。
n在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
 
(二)设计思路:
把数字利用取余拆为个,十,百,千,万,分别计算出现一的个数,加和。
(三)源代码:
 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int n1,m,x;
 7     cout << "请输入数字:" << endl;
 8     cin >> m;
 9     int n = 0;
10     for (int i = 1; i <= m; i++)
11     {
12         n1 = i;
13         while (n1 != 0)
14         {
15             x = n1 % 10;
16             if (x == 1)
17             {
18                 n++;
19             }
20             n1 = n1 / 10;
21         }
22     }
23     cout << "含有数字一数目:" << n << "" << endl;
24 }

(四)截图

(五)总结:

在开始想把个十百千位分开时是通过举例,总结,利用输入的数字的位数对1的个数进行计算。通过这次我知道了有时要将问题一步步分解寻找方法。

posted @ 2015-06-05 01:00  ruanjian1305  阅读(284)  评论(0编辑  收藏  举报