Цифры поэлементной суммы двух массивов в новый массив
Учитывая два массива положительных целых чисел A и B размеров M и N соответственно, задача состоит в том, чтобы вставить A [i] + B [i] в новый массив для каждого i = 0 в min (M, N) и распечатать новый сгенерированный массив в конце. Если сумма является двузначным числом, тогда разбейте цифры на два элемента, т.е. каждый элемент результирующего массива должен быть однозначным числом.
Примеры:
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
Подход: создайте вектор для хранения результата каждого добавления. Если сложение представляет собой однозначное число, нажмите число в векторе, иначе разбейте число на разные цифры и вставьте цифры в массиве одну за другой. Напечатайте содержимое вектора в конце.
Ниже представлена реализация описанного выше подхода:
C ++
// 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
# 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< 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 |
Javascript
<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