BM86 大数加法
题目要求
思路分析
如果使用js来做的话,js中有一个BigInt类型的变量,使用这个类型可以直接比较大的字符串直接转化为数字,但是这样做只是能够刷题,不能够应付同类型的题,因此我们可以换一种思路。
方法二:
1. 先将两个字符串补齐,补为长度较长的那个字符串,位数不够用0来补,这里我们可以借助js中padStart来实现。比如 '9'.padStart(4,'0')
结果就是0009,在这里我们可以用这种比较简便的方法
2. 将字符串转数组,两两从最低位开始累加,如果有进位,则将标志位carry置1,并且加上余数
3. 在遍历完字符串后,需要判断carry标志位是否为0,如果不为0,则需要加上
代码参考
/*
给定两个数字字符串,返回相加后的结果,注意:如果直接转number可能长度不够
*/
// 思路:标志一个进位,将两个字符串的长度设置为一样,不够则用0补齐
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
function solve (s, t) {
// write code here
if (s.length === 0 || s == 0) return t
if (t.length === 0 || t == 0) return s
const maxLen = Math.max(s.length, t.length)
s = s.padStart(maxLen, '0').split('').reverse()
t = t.padStart(maxLen, '0').split('').reverse()
let sum = ''
let carry = 0
for (let i = 0; i < s.length; i++) {
let tmp = parseInt(s[i]) + parseInt(t[i]) + carry
if (tmp >= 10) {
sum += tmp % 10
carry = Math.floor(tmp / 10)
} else {
sum += tmp
carry = 0
}
}
if (carry) sum += carry
// console.log(sum.split('').reverse().join(''))
return sum.split('').reverse().join('')
}