โจทย์: บวก integer n กับ number ที่เก็บใน array of digits (most significant digit first) เช่น n=213, m=[1,5,8] → 213+158=371
อัลกอริธึม: Digit-by-digit Addition from Right
- เริ่มจาก digit สุดท้ายของ array (index size-1) 2. บวกกับ LSD ของ n (n%10) + carry 3. เก็บผลลัพธ์ % 10 กลับเข้า array, carry = ผลลัพธ์ / 10 4. n = n / 10, เลื่อดไปซ้าย 5. ถ้า n หมดแต่ยังมี carry → propagate ต่อ
ตัวอย่างโค้ด C++
#include <iostream>
using namespace std;
void addNumbers(int n, int size, int* m) {
int carry = 0;
for (int i = size - 1; i >= 0; i--) {
int sum = (n % 10) + m[i] + carry;
n /= 10;
carry = sum / 10;
m[i] = sum % 10;
}
// Note: if n still has digits or carry remains, need extra handling
}
int main() {
int n = 679;
int m[] = {1, 9, 5, 7, 1, 9};
int size = sizeof(m) / sizeof(m[0]);
cout << "Sum: ";
addNumbers(n, size, m);
for (int i = 0; i < size; i++) cout << m[i];
}
อินพุต
n=679, m=[1,9,5,7,1,9]
เอาต์พุท
196398
หมายเหตุ: โค้ดต้นฉบับไม่ handle carry overflow หลัง loop จบ ควรเพิ่ม logic ขยาย array หรือ return carry