一 实验要求
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:
写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。
在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
二 思路
计算从一到这个数有多少个一,只要一个一个数出就可以了,用到for循环一个一个数检验,一个循环内得到这个数的每一位,每得到一个一就将计数加一,for循环完成后输出。
三 代码实现
//康娜 #include<iostream> using namespace std; void main() { int i,n,a=0,b,c,length=0; cout << "请输入计算的数字"; cin >> n; for (i = 1; i <= n; i++){ b = i; while (b != 0) { c = b % 10; if (c== 1) { a++; } b = b / 10; } } cout << a; }
四 效果截图
五 总结
在思考这道题目的时候,本来我陷入了一个死胡同,但是后来我理清思绪,换了一种思考方式就想出了这种方法。以后如果在思考问题时换一种思路,也会得到很好的效果。