BM86 大数加法

题目要求

image

思路分析

如果使用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('')
}
posted @ 2022-12-31 16:52  含若飞  阅读(25)  评论(0编辑  收藏  举报