(一)题目:
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的个数进行计算。通过这次我知道了有时要将问题一步步分解寻找方法。