- 把字符串split成数组。
- reverse翻转数组,让最小位在前,便于计算。
- 初始化一个空数组r,每个元素都是0,同时数组长度要比 两个字符串数组中最长的还要加1,即Math.max(length1,length2)+1,加1是为了进位,比如999 + 99 ,最长999 为3 位,但最终结果是 1098, 4位
- 遍历,逐个计算:r[i]+a[0][i] + a[1][i] ,如果大于等于10,则 当前位 r[i] = r[i]+a[0][i] + a[1][i]-10, 同时下一位进1:r[i] = 1; 如果小于10,则不需要进位,r[i] = r[i]+a[0][i] + a[1][i]
- 所有位全部遍历完成后,先判断r的最后一位是不是0:
如果是0,则说明最后没有产生进位,比如:345 + 11 = 356 ,仍然是3位,则此时,需要把r最末尾的0删掉;
如果不是0,则说明产生了进位,比如999 + 99 = 1098,此时r多加的一位产生了作用,被占了,则不需要额外处理。
6. 最后,reverse翻转数组,使其变回原来正常顺序,再变成字符串join
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
let arr = [];
while ((line = await readline())) {
arr.push(line.split("").map(Number).reverse()); // 变成数字、翻转数组
}
let bigL = arr[0].length >= arr[1].length ? arr[0].length : arr[1].length; // 取最大数的长度
let res = new Array(bigL + 1).fill(0); // 初始化res数组,多初始化一位,因为最后可能多进一位
for (let i = 0; i < bigL; i++) {
let tc = 0;
if (arr[0][i] != undefined && arr[1][i] != undefined) {
tc = res[i] + arr[0][i] + arr[1][i];
} else if (arr[0][i] == undefined && arr[1][i] != undefined) {
tc = res[i] + arr[1][i];
}else if(arr[0][i] != undefined && arr[1][i] == undefined){
tc = res[i] + arr[0][i];
}
if (tc >= 10) {
tc = tc - 10;
res[i+1] = 1; // 进位
}
res[i] = tc;
}
if(res[bigL] == 0){ // 如果最后没有进一位,记得把末尾的0删掉
res.splice(bigL,1);
}
console.log(res.reverse().join(''));
})();

京公网安备 11010502036488号