zoukankan      html  css  js  c++  java
  • 1的个数

    1,题目

    输入一个十进制的数,输出

        (1)、给定n,求出从1到n的所有整数中1的个数。(暂用用f(n)表示)   

        (2)、求满足n=f(n)的最小整数(1除外)。

    假如需要求的N=23106,那么计算过程如下:

    万位为11 0000--1 9999    共计10000个

    千位为1:   0 1 000--2 1 999    共计3*1000 = 3000,其中3表示万位可以填0,1,2三种情况,1000表示后面三位有000-999共1000种可能,所以总共可有3000种可能

    百位为1:这里的可能情况并不是:00 1 00--23 1 99,因为最大只能到23106,所以我们可以把总和分为2部分:

                      00 1 00--221 99:共计23*100种,其中23表示万千位可以取00-22,23种可能,100表示十个位可以取00-99,100中可能。

                      23 1 00--231 06:共计7种,即万千位都固定,只有23一种情况,十个位可以取00-56,共57种可能

                      所以百位为1的数字数目,有2300+7 = 2307种;

    十位为1:000 1 0--230 1 9   共计231*10=2310种,其中231表示万千百位可以取000-231,232种可能,而10表示个位可以去0-9十种可能。

    因为以23110>23106,所以万千百位=231,且十位=1的数字数目为0

    个位为1:0000 1--2310 1    共计2311*1种

                      所以总计数目:10000+3000+2307+2310+2311 = 19928种可能。

    所以我们只需要对数字位数上的1进行分解计算即可。

    下面以12为例写一个简单代码

    代码如下:

    可以看到最后的计算结果为:

    总结:重要的还是思想,就像大道至简中说的代码只是“愚公移山”,相信以后能和计算机更好的交流。

     

     

  • 相关阅读:
    6.素数和(素数的判断)
    6.素数和(素数的判断)
    5.明明的随机数(桶排序经典例题)
    5.明明的随机数(桶排序经典例题)
    5.明明的随机数(桶排序经典例题)
    5.明明的随机数(桶排序经典例题)
    Algs4-1.2.11根据Date的API实现一个SmartDate类型
    Algs4-1.2.10编写一个类VisualCounter
    Algs4-1.2.9使用Counter统计BinarySearch检查的key个数
    Algs4-1.2.8引用型变量赋值-数组复制
  • 原文地址:https://www.cnblogs.com/LJT666/p/4545193.html
Copyright © 2011-2022 走看看