บทนำ
โจทย์: บวกอาร์เรย์สองชุดตามตำแหน่ง (index) เดียวกัน หากผลบวกมีหลักมากกว่า 1 ให้แยกหลักแต่ละหลักเก็บในอาร์เรย์ผลลัพธ์
ตัวอย่าง
arr_one = {1, 2, 32, 4, 5}
arr_two = {1, 52, 3}
ผลลัพธ์: 2 5 4 3 5 4 5
คำนวณ: index 0: 1+1=2 → [2] index 1: 2+52=54 → [5,4] index 2: 32+3=35 → [3,5] index 3: 4 (เหลือ arr_one) → [4] index 4: 5 (เหลือ arr_one) → [5]
ขั้นตอนการแก้ปัญหา
- ใช้ vector เก็บผลลัพธ์ (ขนาดไม่แน่นอน)
- วนลูปบวกตำแหน่งที่ตรงกันจนหมดอาร์เรย์สั้นกว่า
- แยกหลักของผลบวกด้วยฟังก์ชัน Recursive (pushDigits)
- ต่อท้ายสมาชิกที่เหลือของอาร์เรย์ยาวกว่า
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
void pushDigits(int num, vector<int> &result) {
if (num > 0) {
pushDigits(num / 10, result);
result.push_back(num % 10);
}
}
void printVector(vector<int> &result) {
for (int i : result) {
cout << i << " ";
}
cout << endl;
}
void addTwoArrayElements(vector<int> arr_one, vector<int> arr_two) {
vector<int> result;
int arr_one_length = arr_one.size(), arr_two_length = arr_two.size();
int i = 0;
while (i < arr_one_length && i < arr_two_length) {
pushDigits(arr_one[i] + arr_two[i], result);
i++;
}
while (i < arr_one_length) {
pushDigits(arr_one[i++], result);
}
while (i < arr_two_length) {
pushDigits(arr_two[i++], result);
}
printVector(result);
}
int main() {
vector<int> arr_one = {1, 2, 32, 4, 5};
vector<int> arr_two = {1, 52, 3};
addTwoArrayElements(arr_one, arr_two);
return 0;
}
ผลลัพธ์
2 5 4 3 5 4 5
สรุป
เทคนิค Recursive แยกหลัก (Divide by 10, Mod 10) ใช้ได้ทั่วไป สังเกตว่าต้องแยกจากหลักสูงสุดไปต่ำสุด จึง Recursive ก่อนแล้วค่อย push_back