《找“1”》

一 实验要求

给定一个十进制的正整数,写下从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;
}


四 效果截图

五 总结

在思考这道题目的时候,本来我陷入了一个死胡同,但是后来我理清思绪,换了一种思考方式就想出了这种方法。以后如果在思考问题时换一种思路,也会得到很好的效果。

原文地址:https://www.cnblogs.com/lottie021/p/4551595.html