zoukankan      html  css  js  c++  java
  • 像十进制的二进制数题解

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

    求赞~~

    臭不要脸

    题面描述

    (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/C++
    不使用判断语句求一组数中的奇数/偶数个数
    heap(堆)
    One-Hot Encoding(独热编码)
    泰坦尼克号生存预测
    LaTeX 使用笔记
    python学习 —— seaborn、matplotlib、pandas、numpy package的混合使用
    Python 读取本地*.txt文件 替换 内容 并保存
    MySQL基本命令脚本
    MySQL简介
  • 原文地址:https://www.cnblogs.com/jerrywang-blogs/p/14900428.html
Copyright © 2011-2022 走看看