V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
brelian
V2EX  ›  算法

20180321 今日算法

  •  
  •   brelian · 2018-03-21 08:24:44 +08:00 via Android · 4065 次点击
    这是一个创建于 2437 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Given two binary strings, return their sum (also a binary string).

    For example,
    a = "11"
    b = "1"
    Return "100".
    19 条回复    2018-03-21 23:08:36 +08:00
    zagreb
        1
    zagreb  
       2018-03-21 09:01:09 +08:00
    return bin(int(a, 2) + int(b, 2))[2:]
    zqqian
        2
    zqqian  
       2018-03-21 09:19:47 +08:00 via Android
    小学生算术
    brelian
        3
    brelian  
    OP
       2018-03-21 09:24:17 +08:00 via Android
    @zqqian 愿闻其详?
    mengyaoss77
        4
    mengyaoss77  
       2018-03-21 09:27:39 +08:00
    声明一个足够长的数组,然后按位加放进去。。
    hjdtl
        5
    hjdtl  
       2018-03-21 09:29:41 +08:00
    (parseInt(a,2)+parseInt(b,2)).toString(2)
    zqqian
        6
    zqqian  
       2018-03-21 09:34:33 +08:00 via Android
    @brelian 就是最朴素的模拟,从右向左按位加,像小学生算术那样
    kaifeii
        7
    kaifeii  
       2018-03-21 09:37:20 +08:00 via iPhone
    题目应该是有很长位数的。除了按位加以外有一个位运算做加法的方法,异或后移位
    kaifeii
        8
    kaifeii  
       2018-03-21 09:39:28 +08:00 via iPhone
    从右向左的模拟不能应对从左到右流式输入,用位运算模拟方式可以
    @zqqian
    kaifeii
        9
    kaifeii  
       2018-03-21 09:41:21 +08:00 via iPhone
    当然我只是举例两个字符串同时确定位数从左向右一起输入的特殊情况,有点钻牛角尖了
    zqqian
        10
    zqqian  
       2018-03-21 09:41:51 +08:00 via Android
    @kaifeii 可以先存到数组里面然后离线计算
    ebony0319
        11
    ebony0319  
       2018-03-21 09:47:38 +08:00 via Android
    楼上很多都没有考虑字符串是可以无限长,但是 int 是有范围的。
    zqqian
        12
    zqqian  
       2018-03-21 09:50:46 +08:00 via Android
    @ebony0319 所以要用数组。。。
    newtype0092
        13
    newtype0092  
       2018-03-21 09:52:43 +08:00
    @ebony0319 大数计算一般是按小学学的竖式的方法计算的吧,开两个数组,从低到高位依次计算,能算多大看内存。
    tommyZZM
        14
    tommyZZM  
       2018-03-21 09:55:40 +08:00
    加减法感觉还好。

    请大佬指教一下乘除法怎么弄?
    yzyun08
        15
    yzyun08  
       2018-03-21 10:16:06 +08:00
    @tommyZZM 乘除法也暴力一位一位算就好了当然 也可以几位压到一个数组下标
    luoluoluo
        16
    luoluoluo  
       2018-03-21 10:30:00 +08:00
    要是真模拟,先 reverse a b ;再相加;结果 reverse
    xrlin
        17
    xrlin  
       2018-03-21 14:10:18 +08:00
    按位计算就行了,只要记录下前一位的进位。
    siyemiaokube
        18
    siyemiaokube  
       2018-03-21 23:05:26 +08:00 via iPhone
    siyemiaokube
        19
    siyemiaokube  
       2018-03-21 23:08:36 +08:00 via iPhone
    @tommyZZM 百度:高精度

    课后练习:高精度模除、高精度进制转换、高精度位运算
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3328 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 00:05 · PVG 08:05 · LAX 16:05 · JFK 19:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.