Given two arrays of positive integers A and B of sizes M and N respectively, the task is to push A[i] + B[i] into a new array for every i = 0 to min(M, N) and print the newly generated array in the end. If the sum is a two-digit number then break the digits into two elements i.e. every element of the resultant array must be a single digit number.
Examples:
Input: A = {2, 3, 4, 5}, B = {1, 12, 3}
Output: 3 1 5 7 5
2 + 1 = 3
3 + 12 = 15 = 1 5
4 + 3 = 7
5
Hence the resultant array will be {3, 1, 5, 7, 5}Input: A = {23, 5, 2, 7, 87}, B = {4, 67, 2, 8}
Output: 2 7 7 2 4 1 5 8 7
Approach: Create a vector to store the result of every addition. If the addition is a single digit number then push the number in the vector else break the number into different digits and push the digits in the array one by one. Print the contents of the vector in the end.
Below is the implementation of the above approach:
// C++ implementation of the approach #include <iostream> #include <vector> using namespace std;
// Utility function to print the contents of the vector void printVector(vector< int >& result)
{ for ( int i : result)
cout << i << " " ;
} // Recursive function to separate the digits of a positive // integer and add them to the given vector void split_number( int num, vector< int >& result)
{ if (num > 0) {
split_number(num / 10, result);
result.push_back(num % 10);
}
} // Function to add two arrays void add(vector< int > a, vector< int > b)
{ // Vector to store the output
vector< int > result;
int m = a.size(), n = b.size();
// Loop till a or b runs out
int i = 0;
while (i < m && i < n) {
// Get sum of next element from each array
int sum = a[i] + b[i];
// Separate the digits of sum and add them to
// the resultant vector
split_number(sum, result);
i++;
}
// Process remaining elements of first vector, if any
while (i < m) {
split_number(a[i++], result);
}
// Process remaining elements of second vector, if any
while (i < n) {
split_number(b[i++], result);
}
// Print the resultant vector
printVector(result);
} // Driver code int main()
{ // input vectors
vector< int > a = { 23, 5, 2, 7, 87 };
vector< int > b = { 4, 67, 2, 8 };
add(a, b);
return 0;
} |
// Java implementation of the above approach import java.util.*;
class GFG
{ // Utility function to print
// the contents of the vector
static void printVector(Vector<Integer> result)
{
for ( int i : result)
{
System.out.print(i + " " );
}
}
// Recursive function to separate
// the digits of a positive integer
// and add them to the given vector
static void split_number( int num, Vector<Integer> result)
{
if (num > 0 )
{
split_number(num / 10 , result);
result.add(num % 10 );
}
}
// Function to add two arrays
static void add(Vector<Integer> a, Vector<Integer> b)
{
// Vector to store the output
Vector<Integer> result = new Vector<Integer>();
int m = a.size(), n = b.size();
// Loop till a or b runs out
int i = 0 ;
while (i < m && i < n)
{
// Get sum of next element from each array
int sum = a.get(i) + b.get(i);
// Separate the digits of sum and add them to
// the resultant vector
split_number(sum, result);
i++;
}
// Process remaining elements
// of first vector, if any
while (i < m)
{
split_number(a.get(i++), result);
}
// Process remaining elements
// of second vector, if any
while (i < n)
{
split_number(b.get(i++), result);
}
// Print the resultant vector
printVector(result);
}
// Driver code
public static void main(String[] args)
{
// input vectors
int [] arr1 = { 23 , 5 , 2 , 7 , 87 };
Vector<Integer> a = new Vector<>();
for (Integer i:arr1)
a.add(i);
int [] arr2 = { 4 , 67 , 2 , 8 };
Vector<Integer> b = new Vector<Integer>();
for (Integer i:arr2)
b.add(i);
add(a, b);
}
} // This code is contributed by 29AjayKumar |
# Python3 implementation of the # above approach # Utility function to print the # contents of the list def printVector(result):
for i in result:
print (i, end = " " )
# Recursive function to separate the # digits of a positive integer and # add them to the given list def split_number(num, result):
if num > 0 :
split_number(num / / 10 , result)
result.append(num % 10 )
# Function to add two lists def add(a, b):
# List to store the output
result = []
m, n = len (a), len (b)
# Loop till a or b runs out
i = 0
while i < m and i < n:
# Get sum of next element from
# each array
sum = a[i] + b[i]
# Separate the digits of sum and
# add them to the resultant list
split_number( sum , result)
i + = 1
# Process remaining elements of
# first list, if any
while i < m:
split_number(a[i], result)
i + = 1
# Process remaining elements of
# second list, if any
while i < n:
split_number(b[i], result)
i + = 1 # Print the resultant list
printVector(result)
# Driver Code if __name__ = = "__main__" :
# input lists
a = [ 23 , 5 , 2 , 7 , 87 ]
b = [ 4 , 67 , 2 , 8 ]
add(a, b)
# This code is contributed by rituraj_jain |
// C# implementation of the above approach using System;
using System.Collections.Generic;
class GFG
{ // Utility function to print
// the contents of the vector
static void printVector(List< int > result)
{
foreach ( int i in result)
{
Console.Write(i + " " );
}
}
// Recursive function to separate
// the digits of a positive integer
// and add them to the given vector
static void split_number( int num, List< int > result)
{
if (num > 0)
{
split_number(num / 10, result);
result.Add(num % 10);
}
}
// Function to add two arrays
static void add(List< int > a, List< int > b)
{
// Vector to store the output
List< int > result = new List< int >();
int m = a.Count, n = b.Count;
// Loop till a or b runs out
int i = 0;
while (i < m && i < n)
{
// Get sum of next element from each array
int sum = a[i] + b[i];
// Separate the digits of sum and add them to
// the resultant vector
split_number(sum, result);
i++;
}
// Process remaining elements
// of first vector, if any
while (i < m)
{
split_number(a[i++], result);
}
// Process remaining elements
// of second vector, if any
while (i < n)
{
split_number(b[i++], result);
}
// Print the resultant vector
printVector(result);
}
// Driver code
public static void Main(String[] args)
{
// input vectors
int [] arr1 = {23, 5, 2, 7, 87};
List< int > a = new List< int >();
foreach ( int i in arr1)
a.Add(i);
int [] arr2 = {4, 67, 2, 8};
List< int > b = new List< int >();
foreach ( int i in arr2)
b.Add(i);
add(a, b);
}
} // This code is contributed by princiraj1992 |
<script> // Javascript implementation of the approach // Utility function to print the contents of the vector function printVector(result)
{ for (let i = 0; i < result.length; i++)
document.write(result[i] + " " );
} // Recursive function to separate the digits of a positive // integer and add them to the given vector function split_number(num, result)
{ if (num > 0) {
split_number(parseInt(num / 10), result);
result.push(num % 10);
}
} // Function to add two arrays function add(a, b)
{ // Vector to store the output
let result = [];
let m = a.length, n = b.length;
// Loop till a or b runs out
let i = 0;
while (i < m && i < n) {
// Get sum of next element from each array
let sum = a[i] + b[i];
// Separate the digits of sum and add them to
// the resultant vector
split_number(sum, result);
i++;
}
// Process remaining elements of first vector, if any
while (i < m) {
split_number(a[i++], result);
}
// Process remaining elements of second vector, if any
while (i < n) {
split_number(b[i++], result);
}
// Print the resultant vector
printVector(result);
} // Driver code // input vectors let a = [ 23, 5, 2, 7, 87 ]; let b = [ 4, 67, 2, 8 ]; add(a, b); // This code is contributed by souravmahato348. </script> |
2 7 7 2 4 1 5 8 7
Time Complexity : O(max(m,n))