Skip to main content

大数相加

实际应用:解决浮点数相加问题

题目

const add = (a, b) => {
...
return sum
}

console.log(add("11111111101234567","77777777707654321"))
console.log(add("911111111101234567","77777777707654321"))

思路:

  1. 找到最长的数字长度,进行末尾对齐
  2. 每个数字相加
  3. 检测进位(注意不要遗漏首次和末尾的检测)

答案

  1. 找到最长的数字
  2. 声明 sum 和 add 进位
  3. 从 1 开始 for 循环
  4. 个位相加:let ci = parseInt(a[maxLength-i] || '0') + parseInt(b[maxLength-i] || '0') + add
  5. 查看进位add = ci >= 10 ? 1 : 0;
  6. 获取进位后的个位
  7. 连接到后面
  8. 判断末尾进位情况
const add = (a,b) => {
// 找到最长的数字
const maxLength = Math.max(a.length,b.length)
// 是否进位(+10)
let add = 0
let sum = ''
for(let i=1;i<maxLength;i++){
// 个位相加
let ci = parseInt(a[maxLength-i] || '0') + parseInt(b[maxLength-i] || '0') + add

// 进位
add = ci >= 10 ? 1 : 0;

// 获取进位后的个位
ci = add >0 ? ci - 10:ci

// 连接到后面
sum = ci + sum
}
// 判断末尾进位情况
if(add){
sum = '1' +sum
}

return sum
}
console.log(add("11111111101234567","77777777707654321"))