nowcoder NC1 大数加法|刷题打卡
本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。 (字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)
输入
"1","99"
输出
"100"
二、思路分析:
- 将字符串分割成字符数组。
- 将字符数组右边对齐。
- 利用数组对每位数字进行加运算,注意保存进位。
三、AC 代码:
function solve( s , t ) {
// write code here
let a1 = s.split("")
let a2 = t.split("")
let a1len = a1.length
let a2len = a2.length
let uplen
let up = []
let count = []
if (a1len >= a2len) {
uplen = a1len
for (let i = 0; i < a1len - a2len; i++) {
a2 = [0].concat(a2);
}
} else {
uplen = a2len
for (let i = 0; i < a2len - a1len; i++) {
a1 = [0].concat(a1);
}
}
up.length = uplen + 1
up.fill(0);
for (let i = uplen - 1; i >= 0; i--) {
count[i] = ((a1[i] - 0) + (a2[i] - 0) + (up[i + 1] - 0)) % 10;
(a1[i] - 0) + (a2[i] - 0) + (up[i + 1] - 0)>= 10 ? up[i] = 1 : up[i] = 0
if(i==0 && up[0] == 1){
count = [1].concat(count)
}
}
return count.join("")
}
四、总结:
对于大数加法,如果只用数值类型进行运算,可能会超出数值类型可以表示的范围。 所以考虑用数组来进行每一位数字的运算,也就是模拟笔算加法的过程。