zoukankan      html  css  js  c++  java
  • 编程之美2.4——计算1的个数

    计算从1到整数N之间的所有整数,1出现的次数。记为f(N).

    比如12:1,10,11,12 1出现5次。

    【思路】

    1.常规解法,先计算任意一个整数N中所含的1的个数,比如13含1个1,然后再套一个从1到N的循环,计算每个数出现1的次数。

    2.总结规律。

    f(N)=个位出现1的个数+十位出现1的个数+百位出现1的个数+.....

    eg:N=123;

    个位出现1的次数与十位数的关系:

    个位数字=0:十位数(的个数)

    个位数字>=1:十位数+1

    十位出现1的次数与个位数的关系:

    十位数字=1:个位数+1

    十位数字>1:(百位数+1)*10

    总结:每位上出现1的次数会受到三个因素影响:该位上的数字、该位以下(低位)上的数字、该位以上(高位)上的数字。

    【code in the book】

    int count1inInteger(int n)
    {
        int icount=0;
        int ilower=0;
        int icurr=0;
        int ihigher=0;
        int ifactor=1;
        while(n/ifactor!=0){
            ilower=n-(n/ifactor)*ifactor;
            icurr=(n/ifactor)%10;
            ihigher=n/(ifactor*10);
            switch(icurr){
            case 0:
                icount+=ihigher*ifactor;
                break;
            case 1:
                icount+=ihigher*ifactor+ilower+1;
                break;
            default:
                icount+=(ihigher+1)*ifactor;
                break;
            }
            ifactor*=10;
        }
        return icount;
    }

    【总结】

    算法很棒,但规律难发现,更难整合到几行代码中。

  • 相关阅读:
    安装Visual Studio的插件AnkhSvn
    从零开始安装 Ambari (1) -- 安装前的准备工作
    centos7 安装 mysql
    hortonworks docker 安装
    Kafka connect
    KONG -- 图形化管理(Kong Dashboard)
    KONG -- 配置 service 并添加 key-auth
    KONG 安装 (在 CentOS 7 中)
    kylin cube 构建过程
    sqoop 安装与命令
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4503556.html
Copyright © 2011-2022 走看看