使用商和余数的二进制加法算法

3

我正在尝试使用Javascript实现二进制加法算法,

问题是当我console.log函数时,它什么都不返回。以下是我的代码:

function max(a,b)
  {
    if(a>b)
       return a;
    return b;
   }

function addb(A,B)
{
    var result=[]
    var l=max(A.length,B.length)
    var carry=0
    var sum=0;
    for(var i=l.length-1;i>=0;i--)
      {
        sum=A[i]+B[i]+carry;
        carry=Math.floor(sum/2);
        result[i]=sum%2;
       }
     return result;
    }
 var a=[1,1,0];
 var b=[1,1,1];
 console.log(addb(a,b));

3
你的 "l" 不是一个数组,所以需要这样写:for(var i=l-1;i>=0;i--) - EugenSunic
3个回答

2
您正在将整数传递给max函数,然后将其视为数组。
例如: var l=max(A.length,B.length) .... for(var i=*l.length-1*;i>=0;i--) 只需将数组放入即可。 var l=max(A,B)

1
你需要长度 l,但不能使用 length 属性,并最终检查进位并将该值插入数组头部。

function max(a, b) {
    return a > b ? a: b;
}

function addb(A, B) {
  var result = [],
      l = max(A.length, B.length),
      carry = 0,
      sum = 0;

  for (var i = l - 1; i >= 0; i--) {
      sum = A[i] + B[i] + carry;
      carry = Math.floor(sum / 2);
      result[i] = sum % 2;
  }

  if (carry) result.unshift(carry); // the most left value!
  return result;
}

var a = [1, 1, 0];
var b = [1, 1, 1];

console.log(addb(a, b));


0

l variable is a number already not an array hence just use that number inside the for loop as the starting case

function max(a, b) {
  if (a > b)
    return a;
  return b;
}

function addb(A, B) {
  var result = []
  var l = max(A.length, B.length)
  var carry = 0
  var sum = 0;
  for (var i = l- 1; i >= 0; i--) {
    sum = A[i] + B[i] + carry;
    carry = Math.floor(sum / 2);
    result[i] = sum % 2;
  }
  return result;
}
var a = [1, 1, 0];
var b = [1, 1, 1];
console.log(addb(a, b))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接