一、题目要求
n给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
n要求:
n写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。
n在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
二、设计思路
设计思路比较简单,即把从1到输入的这个数之间,所有的数都拆分开,拆分成百位数,十位数,个位数等。之后如果出现1,就在计数的树中加一个1。
三、源代码
#include<iostream> using namespace std; void main() { int i,n,j=1,m; cout<<"请输入n:"<<endl; cin>>n; int n1; for(i=2;i<=n;i++) { n1=i; while(n1!=0) { m=n1%10; if(m==1) { j++; } n1=n1/10; } } cout<<j<<endl; }
四、结果截图
五、实验总结
其实这次的问题可以用枚举法找规律来解决,我这个方法虽然简单好想,但是这并不是最好的解决方法。今天这个问题,可以用这个方法解决,但是如果有一天,碰到不能用这个解决的问题呢?所以以后不应该老是这一种定性思维,应该多找一些规律从中找出解决方法。