zoukankan      html  css  js  c++  java
  • 计算1至n中数字X出现的次数

    题目:
    给定一个数N,求出1-N之间的数字有多少个1,例如N=11时结果为4(只有1,10,11含1)

    经典问题。

    参照编程之美分析

    编程之美上的一道题目,原文分析的方法十分简单,并且很容易程序实现。分析:
    若x = abcde,我们来看百位为1出现的次数,这里分3种情况讨论:
    1. 百位为0时,假设x = 45021,可以算出百位为1出现情况:
          100~199
         1100~1199
        ...
        44100~44199
        总共是45*100个1
    2. 百位为1时,假设x = 45121,可以算出百位为1出现情况:
          100~199
         1100~1199
        ...
        44100~44199
        45100~45145
        总共是45*100+(45+1)个1
    3. 百位大于1时,假设x = 45821,可以算出百位为1出现情况:
          100~199
         1100~1199
        ...
        44100~44199
        45100~45199
        总共是(45+1)*100个1

    于是,我们可以找到这样一个规律,对于某一特定的位,该位出现1的次数为:
    1. 若该位的值为0,则该位出现1的次数=高位值*该位的进制
    2. 若该位的值为1,则该位出现1的次数=高位值*该位的进制+低位值+1
    3. 若该位的值大于1,则该位出现1的次数=(高位值+1)*该位的进制
  • 相关阅读:
    C语言I博客作业05
    C语言I博客作业04
    C语言II博客作业01
    学期总结
    第一周作业
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3309278.html
Copyright © 2011-2022 走看看