String 将字符串添加为数字

String 将字符串添加为数字,string,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 =

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

以下是我目前掌握的情况:

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,以使其按预期运行


有更好的替代方案吗

将两个数字都视为一个数字数组。将它们从右到左相加处理溢出标志。假设您的数字长度相同

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);

简单、直观的整数加法,就像您手动执行的那样:

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的长度不相等(但您声明它们是相等的),则应在计算前在较短的字符串前加上零。

为什么不在每对数字上加上和结转?小学代数样式你可以在字符串前面加0,使它们的长度相同——这可以很容易地解决“长度不一样”的问题。这似乎不正确。2435476587872034729384659813465923659182365981236591823651982365129356 + 1123751283518235187235408721354012351239651238561029356120935612395120956129835629836501293650123650129375610297356120389571620 = 3559227871390269916620068534819936010422017219797621179772917977524476. 这不起作用,因为结果的位数少于最长的位数number@NewAlexandria:假设您的号码长度相同