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

Sum of Two Numbers Where One Number is Represented as Array of Digits in C++


โจทย์: บวก 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

  1. เริ่มจาก digit สุดท้ายของ array (index size-1)
  2. 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