Digits of element wise sum of two arrays into a new array

20 Apr, 2021
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++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <iostream>#include <vector>using namespace std; // Utility function to print the contents of the vectorvoid 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 vectorvoid split_number(int num, vector<int>& result){    if (num > 0) {        split_number(num / 10, result);        result.push_back(num % 10);    }} // Function to add two arraysvoid 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 codeint 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 approachimport 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 listdef 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 listdef split_number(num, result):     if num > 0:        split_number(num // 10, result)        result.append(num % 10) # Function to add two listsdef 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 Codeif __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 approachusing 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 vectorfunction 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 vectorfunction split_number(num, result){    if (num > 0) {        split_number(parseInt(num / 10), result);        result.push(num % 10);    }} // Function to add two arraysfunction 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 vectorslet 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)) 
rituraj_jain
VishalBachchas
29AjayKumar
princiraj1992
souravmahato348
Technical Scripter 2018
Arrays
C++ Programs
Technical Scripter
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Multidimensional Arrays in Java
Stack Data Structure (Introduction and Program)
Linear Search
Header files in C/C++ and its uses
Sorting a Map by value in C++ STL
Program to print ASCII Value of a character
How to return multiple values from a function in C or C++?
Shallow Copy and Deep Copy in C++