• 找1


    一、题目:

      给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。

    要求:

      写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5;

      在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少?

    二、思路:

    根据老师在课上提供的思路,有以下的思路:

    f(3)=1

    f(13)=(1+1)+4  f(23)=(2+1)+10  f(33)=(3+1)+10  ….   f(99)=(9+1)+10

    f(103)=(10+1)+10+4     f(113)=(11+1)+(13+1)+14   f(123)=(23+1)+(12+1)+20  …   f(193)=(93+1)+(19+1)+20

    三、代码

    #include <iostream.h>   

    int f(int num) 

        int sum=0; 

        int factor=1;  

        int lower=0; 

        int now=0; 

        int higher=0; 

        while(num/factor!=0) 

        { 

            lower=num-(num/factor)*factor; 

            now=(num/factor)%10; 

            higher=num/(factor*10); 

            switch(now) 

            { 

                case 0: 

                sum+=higher*factor; 

                break; 

                case 1: 

                sum+=higher*factor+lower+1; 

                break; 

                default: 

                sum+=(higher+1)*factor; 

                break; 

            } 

            factor*=10; 

        } 

        return sum; 

    }  

    四、截图

    五、总结

    老师出题的重点是思路,思路是有了,但是编程的时候感觉好费力,参考了多位同学的成果,基础太不扎实了。

  • 相关阅读:
    intellij idea tomcat 启动不生成war包
    php中的Trait的使用方法
    c++ 命名的强制类型转换
    【递归与动态规划】正则表达式匹配
    c程序设计语言 by K&R(四)输入与输出
    c程序设计语言 by K&R(三)结构
    深入理解c语言指针与内存
    c程序设计语言 by K&R(一)一些c语言基础知识
    c程序设计语言 by K&R(二)指针与数组
    第一次在这里
  • 原文地址:https://www.cnblogs.com/lsfh/p/4474784.html
Copyright © 2020-2023  润新知