我正在尝试解决在代码战中看起来很简单的kata,但我似乎做得不好。
有关此操作的说明如下所示
给出两个整数的字符串表示形式,返回这些整数之和的字符串表示形式。
例如:
sumStrings('1','2') // => '3'
一个整数字符串表示形式,除了十个数字“ 0”至“ 9”之外,将不包含任何字符。
这就是我尝试过的
function sumStrings(a,b) {
return ((+a) + (+b)).toString();
}
但是结果解决了除两个以外的所有问题,这是我得到的错误
sumStrings('712569312664357328695151392','8100824045303269669937')-预期:'712577413488402631964821329',而不是:'7.125774134884027e + 26'
sumStrings('50095301248058391139327916261','81055900096023504197206408605')-预期:'131151201344081895336534324866',而不是:'1.3115120134408189e + 29'
我似乎不明白问题的根源。任何帮助都会帮助您。
答案 0 :(得分:2)
您输入的值大于int类型的最大值。您可以尝试将代码更改为:
function sumStrings(a,b) {
return ((BigInt(a)) + BigInt(b)).toString();
}
这样,它应该返回正确的值
答案 1 :(得分:1)
您可以弹出数字并随身携带一个下一个数字。
function add(a, b) {
var aa = Array.from(a, Number),
bb = Array.from(b, Number),
result = [],
carry = 0,
i = Math.max(a.length, b.length);
while (i--) {
carry += (aa.pop() || 0) + (bb.pop() || 0);
result.unshift(carry % 10);
carry = Math.floor(carry / 10);
}
while (carry) {
result.unshift(carry % 10);
carry = Math.floor(carry / 10);
}
return result.join('');
}
console.log(add('712569312664357328695151392', '8100824045303269669937'));
console.log(add('50095301248058391139327916261', '81055900096023504197206408605'));
答案 2 :(得分:0)