zoukankan      html  css  js  c++  java
  • 找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; 

    }  

    四、截图

    五、总结

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

  • 相关阅读:
    洛谷 P4114 Qtree1
    洛谷 P2486 [SDOI2011]染色
    洛谷 P1505 [国家集训队]旅游
    洛谷 P4281 [AHOI2008]紧急集合 / 聚会
    C++中main函数的返回值一定要是int
    局部变量作为函数返回值
    sizeof和strlen在string类中的使用
    strlen 和 sizeof 的区别
    数据结构中的堆栈和内存中的堆栈问题
    数据类型的字长,字节问题
  • 原文地址:https://www.cnblogs.com/lsfh/p/4474784.html
Copyright © 2011-2022 走看看