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

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

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 // C++ implementation of the approach #include #include using namespace std;    // Utility function to print the contents of the vector void printVector(vector& 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& result) {     if (num > 0) {         split_number(num / 10, result);         result.push_back(num % 10);     } }    // Function to add two arrays void add(vector a, vector b) {     // Vector to store the output     vector 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 a = { 23, 5, 2, 7, 87 };     vector b = { 4, 67, 2, 8 };        add(a, b);        return 0; }

Java

 // Java implementation of the above approach import java.util.*;    class GFG  {        // Utility function to print      // the contents of the vector     static void printVector(Vector 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 result)      {         if (num > 0)          {             split_number(num / 10, result);             result.add(num % 10);         }     }        // Function to add two arrays     static void add(Vector a, Vector b)      {         // Vector to store the output         Vector result = new Vector();         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 a = new Vector<>();         for(Integer i:arr1)             a.add(i);                        int[] arr2 = {4, 67, 2, 8};         Vector b = new Vector();         for(Integer i:arr2)             b.add(i);            add(a, b);     } }     // This code is contributed by 29AjayKumar

Python3

 # 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#

 // 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 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 result)      {         if (num > 0)          {             split_number(num / 10, result);             result.Add(num % 10);         }     }        // Function to add two arrays     static void add(List a, List b)      {         // Vector to store the output         List result = new List();         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 a = new List();         foreach(int i in arr1)             a.Add(i);                        int[] arr2 = {4, 67, 2, 8};         List b = new List();         foreach(int i in arr2)             b.Add(i);            add(a, b);     } }    // This code is contributed by princiraj1992

Output:

2 7 7 2 4 1 5 8 7

Time Complexity : O(max(m,n))

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.