将字符串添加为数字

时间:2014-07-24 14:00:28

标签: string

我试图将两个大数字相加,存储为字符串。

这是我到目前为止所拥有的:

function addBigNums(a,b){
  c = ""; // output
  o = 0;  // carryover

  startLen = a.length-1;
  for(i = startLen; i >= 0; i--) {
   sum = parseInt(a[i], 10) + parseInt(b[i], 10) + o; 
   c = (sum % 10) + c; 
   o = sum >= 10;      
  }

  if(o === true) c = "1" + c;
  return c;
}

我遇到了两个问题:

1)我的携带并不总是正常运作,主要是在:

2)数字长度不同。

现在我认为我必须在0到0之前加上较短的数字,以使其按预期运行。

还有更好的选择吗?

2 个答案:

答案 0 :(得分:0)

将这两个数字视为数字数组。添加它们从右到左处理溢出标志。 Demo。假设你的号码长度相同

function getNumber(len) {
    return Array.apply(null, new Array(len)).map(function(){
        return Math.floor(Math.random()*9);
    }).join('');
}

var len = 600,
    a = getNumber(len), //use your numbers here
    b = getNumber(len),
    flag = 0;

var c = [].reduceRight.call(a, function(acc, val, idx) {
    val = +val + (+b.charAt(idx)) + flag;
    flag = val / 10 | 0;
    val %= 10;
    return val + acc;
}, '');

c = (flag ? 1: '') + c;

console.log(a, b, c);

答案 1 :(得分:0)

简单,直接的整数加法,就像你手动完成一样:

a = "123456";       // input a
b = "123456";       // input b
c = "";             // target-string
o = 0;              // overflow-bit

// traverse string from right to left
for(i = a.length - 1; i >= 0; i--) {

     // do the calculation (with overflow bit)
     sum = parseInt(a[i]) + parseInt(b[i]) + o;

     // prepend resulting digit to target
     c = (sum % 10) + c;

     // set overflow bit for next round
     o = sum >= 10;
}

// prepend another "1" if last overflow-bit is true
if(o == true) c = "1" + c;

如果字符串a和b的长度不相等(但你说它们是相同的),你应该在计算之前用短零作为前缀加上较短的字符串。