এই সমস্যায় দুটি দেওয়া অ্যারের এলিমেন্ট যোগ করার সময় কিছু কনস্ট্রেইন্ট রয়েছে। দুটি অ্যারে a[] ও b[]-এর যোগফল তৃতীয় অ্যারে c[]-এ সংরক্ষিত হবে এমনভাবে যে যোগফলগুলো একক অঙ্কে থাকবে। আর যদি যোগফলের অঙ্কের সংখ্যা ১-এর বেশি হয়, তবে তৃতীয় অ্যারেতে সেটি দুটি একক অঙ্ক হিসেবে স্টোর হবে। উদাহরণস্বরূপ, যোগফল ২৭ হলে তৃতীয় অ্যারেতে ২, ৭ স্টোর হবে।
ইনপুট: a[] = {1, 2, 3, 7, 9, 6} b[] = {34, 11, 4, 7, 8, 7, 6, 99}
আউটপুট: 3 5 1 3 7 1 4 1 7 1 3 6 9 9
ব্যাখ্যা
আউটপুট অ্যারে তৈরি করে দুটি অ্যারের ০th ইনডেক্স থেকে লুপ চালানো হয়। প্রতিটি ইটেরেশনে দুটি অ্যারের পরবর্তী এলিমেন্ট নেয়া হয় এবং যোগ করা হয়। যদি যোগফল ৯-এর বেশি হয়, তবে যোগফলের প্রতিটি অঙ্ক আলাদা করে আউটপুট অ্যারেতে পুশ করা হয়, অন্যথায় যোগফলটিই পুশ করা হয়। অবশেষে বড় অ্যারের বাকি এলিমেন্টগুলো আউটপুট অ্যারেতে পুশ করা হয়।
উদাহরণ কোড (C++)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
void split(int n, vector<int> &c) {
vector<int> temp;
while (n) {
temp.push_back(n % 10);
n = n / 10;
}
c.insert(c.end(), temp.rbegin(), temp.rend());
}
void addArrays(int a[], int b[], int m, int n) {
vector<int> out;
int i = 0;
while (i < m && i < n) {
int sum = a[i] + b[i];
if (sum < 10) {
out.push_back(sum);
} else {
split(sum, out);
}
i++;
}
while (i < m) {
split(a[i++], out);
}
while (i < n) {
split(b[i++], out);
}
for (int x : out)
cout << x << " ";
}
int main() {
int a[] = {1, 2, 3, 7, 9, 6};
int b[] = {34, 11, 4, 7, 8, 7, 6, 99};
int m = 6;
int n = 8;
addArrays(a, b, m, n);
return 0;
}