一、题目要求
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求: 写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。
在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少?
二、设计思想
从个位,十位,百位等一直到最高位寻找1的个数,最终将它们相加即求得其中出现“1”的总个数。首先我们俩从实际数据出发,在课堂上计算了3,13,23,33,43,53,63,73,83,93,103,113,123中各个数字中1出现的个数,然后从中总结出规律然后编程实现了。
三、代码实现
1 #include<iostream.h> 2 int main() 3 { 4 int count=0,i,N,temp; 5 cout<<"请输入正整数的值:"; 6 cin>>N; 7 for(i=1;i<=N;i++) 8 { 9 temp=i;//记录i的值 10 while(temp!=0) 11 { 12 if(temp%10==1) 13 { 14 count=count+1; 15 } 16 temp=temp/10; 17 } 18 } 19 cout<<N<<"包含"<<count<<"个“1”"<<endl; 20 return 0; 21 }
四、实现截图
五、个人总结
这个程序用了temp变量,count统计1的个数,虽然代码较短,但思考的过程是重要的,也是艰难的,刚开始没有思路,后来经过跟同学的讨论才慢慢发现了其中的奥秘,多向他人学习,才能使我们共同进步。