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;
    }

    【总结】

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

  • 相关阅读:
    Python学习笔记之递归函数
    包管理工具-yum
    ElasticSearch定时清理缓存索引
    pytest实现多进程与多线程运行
    获取webView页面内窗体句柄
    文档测试
    ClickHouse 运维相关部分命令记录
    [转]contains a file system with errors, check forced
    log日志重复打印 修改
    jmeter参数化
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4503556.html
Copyright © 2011-2022 走看看