两个二进制的相加可以用位运算,当一个为一 一个为零时 两位相加就为一 两位都是一的话 就往前进一 都为零的话 结果为零
先将 两个二进制长度相同 短的话在前面补零
然后把两个字符串改为数组
当两个都为一的话 需要往前一位进一 当前一位也为一的话还需要往前进一
创建一个 函数 当两位都是一的话 进入函数判断下一个是1还是0 如果是1, 将1改为零直到遇见0,把0改为1.当函数是0时将0改为一
最后再将数组改为字符串
代码:
var addBinary = function(a, b) {
// 补零区域
if(a.length>b.length){
var num = a.length-b.length
for(var i = 0 ;i<num;i++){
b="0"+b
}
}else{
var num = b.length-a.length
for(var i = 0 ;i<num;i++){
a="0"+a
}
}
// 当两位都是一的话进入的函数
function fn(str,ind){
for(var i =ind;i>=0;i--){
if(str[i-1]==1){
str[i-1]=0
}else{
if(i-1<0){
str.unshift(1)
}else{
str[i-1]=1
}
break
}
}
return str
}
// return b
//进行位运算
var str = []
for(var j=0;j<a.length;j++){
str.push(a[j])
}
var num1 = b.length-1
var num3 = str.length-1
for(var i=num3 ;i>=0;i--){
if(str[i]*1+b[num1]*1>1){
str[i]=0
if (str[i-1]==0) {
str[i-1]=1
}else{
str= fn(str,i)//调用函数
if(num3<str.length-1){
i++
}
}
}else if(str[i]==1||b[num1]==1){
str[i]=1
}else{
str[i]=0
}
num1--
}return str.toString().replace(/,/g,"")//将数组转为字符串
};