• 像十进制的二进制数题解


    这是个数学解法,鄙人花了好久才想出来的,所以

    求赞~~

    臭不要脸

    题面描述

    (1)~(n)区间各个数位上只有0与1的数字的个数。

    思路讲解

    打个表,分析一下

    打表发现,在(n)恰好为像二进制的十进制时,个数对应的就是(n)当作二进制看时所对应的十进制数的值

    如果没那么巧,不是像二进制的十进制数时要如何处理呢?

    我们很轻易的就能发现,在到达下一个像二进制的十进制数前,无论(n)多大,个数都是不变的。

    举个栗子

    (1)$11$区间内有$3$个**像二进制的十进制数**,$1$(12)区间内也有(3)像二进制的十进制数
    (1)~(15)区间内也是一样的。

    直到(n=100)时,数量才发生变化,变为了(4)个。

    所以,得出结论:

    (ans=) 将 最大的(≤n)像二进制数的十进制数 看作二进制数时 所对应的十进制数值

    是不是很绕

    举个栗子

    [n=13 ]

    最大的(≤n)像二进制数的十进制数(=11)

    将其看作二进制数时所对应的十进制数值(=3)

    (ans=3) (数字分别有(1),(10),(11))

    放一下找最大的(≤n)像二进制数的十进制数的代码

    bool flag=0;//用于标记上面几位是否有减小
    int w[/*n的长度*/];//w数组用来存储n的各个数位
    for(int i=0;i<len;i++)
    {
        if(flag)//如果上面几位有减小
            w[i]++;//这一位必定是1
        if(w[i]>1)//判断这位是否有减小
            flag=1;
        if(w[i])//只要不是0这位就必定是1
            w[i]=1;
    }
    

    这一段思路不好了解,大家如有不懂建议多看几遍

    剩下的数位分离和进制转换部分就不用我放代码了吧

    祝大家新年快乐!!!

    (write) (in) (2021/2/10),阴历腊月廿九)

    留个赞再走吧( ̄︶ ̄)↗ 

    (The) (End)

    我要拿金牌!
  • 相关阅读:
    《C Primer Plus(第6版)中文版》一1.12 复习题
    《C Primer Plus(第6版)中文版》一1.12 复习题
    线程池多线程视频转码(完整版)
    mencoder的x264encopts选项参数略解
    ffmpeg多线程转码
    案例分析:程序媛记一次特殊的“故障”处理
    WINDOWS下CMake+MinGW64搭建C/C++编译环境
    lvs keepalived nginx-rtmp 视频流服务负载均衡系统搭建
    python 利用字典统计次数
    python 16进制 gbk转中文
  • 原文地址:https://www.cnblogs.com/jerrywang-blogs/p/14900428.html
Copyright © 2020-2023  润新知