美文网首页
二进制的字符串形式加法

二进制的字符串形式加法

作者: linchih | 来源:发表于2017-04-20 23:58 被阅读0次

要求:

  1. @input String a 字符串形式的二进制数
  2. @input String b 字符串形式的二进制数
  3. @output String c 字符串形式的二进制数,为a+b数值之和

思路:

将 a,b转换成数组,从最后一位向前逐步将a[index],b[index]放入一个半加器,半加器输入a,b,和一个进位输入carry,输出a+b+carry之和和一个进位输出,进位输出将成为下一轮进位输入,直至遍历完全部a,b.

代码:

var addBinary = function(a, b) {
    // 进位符号
  var carry = '0'
    var alength = a.length
    var blength = b.length
    //每次的输入a与b
    var inputa = ''
    var inputb = ''
    var res = []
    // 获取b与a中最大的长度
    var length = Math.max(alength,blength)
    //从各字符串的length-1即最后一位执行加法,循环至0结束
    for(var i = 1; i < length+1; i++){
        //在a或者b其中一个已经循环完的情况下,如果进位也为0,提前结束循环,把未循环完剩下的字符直接拼接到res上
        if((alength-i<0||blength-i<0) && carry==='0') {
            alength-i<0?res.push(b.substr(0,blength-i+1)):res.push(a.substr(0,alength-i+1))
            break
        }
       //令半加器的输入为当前字符,如果循环完,设输入为0
        inputa = a[alength-i] ||'0'
        inputb = b[blength-i] ||'0'
        //半加器
        switch(inputa+inputb+carry){
            case '111':
                res.push('1')
                carry = '1'
                break
            case '011':
            case '110':
            case '101':
                res.push('0')
                carry = '1'
                break
            case '001':
            case '010':
            case '100':
                res.push('1')
                carry = '0'
                break
            case '000':
                res.push('0')
                carry = '0'
                break
        }
    }
    //循环完还有进位未处理把进位添加到结果
    if(carry==='1')  res.push('1')
    return res.reverse().join('')   
};

相关文章

  • 二进制的字符串形式加法

    要求: @input String a 字符串形式的二进制数 @input String b 字符串形式的二进制数...

  • LeetCode 67. Add Binary

    使用数组模拟两个二进制字符串加法,使用字符c标记当前位字符。

  • 2019-08-07 字符串加法

    问题 输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对...

  • 开题简介 基本数据类型简介及简单语法

    数字(整数、浮点数、二进制、分数等) 支持加法和乘法等。 序列(字符串、列表num=[1,2,3]、元组tup=(...

  • 67. Add Binary

    题目 给定两个二进制字符串 a,b。以字符串的形式返回两数相加之和。二进制高位在前。 解析 解法很简单,主要考虑如...

  • js 实现大整数加法

    问题描述实现‘字符串加法’,即将两个以字符串形式表示的数字相加,得到结果然后返回一个新的字符串。 例如:输入‘12...

  • AC 剑指 Offer II 002. 二进制加法

    给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 **非空 **字符串且只...

  • 剑指 Offer II 002. 二进制加法

    题目: 给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。 输入为 非空 字符串且...

  • Ajax之响应解码

    我们接收到的响应主体类型可以是多种形式的,包括字符串 String、ArrayBuffer 对象、二进制 Blob...

  • redis字符串数据类型

    字符串类型是redis中最基本的数据类型,他能存储任何形式的字符串,包括二进制数据。可以用来存储用户邮箱,JSON...

网友评论

      本文标题:二进制的字符串形式加法

      本文链接:https://www.haomeiwen.com/subject/rdrrzttx.html