Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การบวกตัวเลขขนาดใหญ่ที่เก็บเป็นสตริงใน JavaScript

บทความนี้สาธิตการบวกตัวเลข 2 ตัวที่เก็บเป็นสตริง โดยไม่แปลงเป็น Number (กัน overflow) ใช้วิธีการบวกแบบมือ digit by digit

ตัวอย่าง

str1 = '234', str2 = '129' -> '363'

ตัวอย่างโค้ด

const str1 = '234';
const str2 = '129';

const addStringNumbers = (str1, str2) => {
  let ind1 = str1.length - 1,
      ind2 = str2.length - 1,
      res = "",
      carry = 0;
  while (ind1 >= 0 || ind2 >= 0 || carry) {
    const val1 = str1[ind1] || 0;
    const val2 = str2[ind2] || 0;
    let sum = +val1 + +val2 + carry;
    carry = sum > 9 ? 1 : 0;
    res = sum % 10 + res;
    ind1--;
    ind2--;
  }
  return res;
};

console.log(addStringNumbers(str1, str2));

ผลลัพธ์

363

คำอธิบาย

เริ่มจากหลักหน่วย (index สุดท้าย) บวก digit + carry เก็บผลลัพธ์ % 10 ไปด้านหน้าสตริง carry = 1 ถ้า sum > 9

ทำงานได้กับตัวเลขขนาดใหญ่ไม่อาจเก็บใน Number ได้ (BigInt alternative: BigInt(str1) + BigInt(str2))