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; 

    }  

    四、截图

    五、总结

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

  • 相关阅读:
    近两年项目回顾系列——velocity模板引擎
    求两个集合的交集和并集C#
    CI框架下JS/CSS文件路径的设置
    Apache下的 SSI 配置
    DOTA
    MySql 查询结果按照指定的顺序
    strtotime 方便获取前几天后几天
    CI框架的session失效原因
    正则解析多重循环模板
    PHP 多维数组按照指定的顺序进行排序
  • 原文地址:https://www.cnblogs.com/lsfh/p/4474784.html
Copyright © 2011-2022 走看看