บทความนี้สาธิตการบวกตัวเลข 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))