Dígitos de la suma sabia del elemento de dos arrays en una nueva array

Dados dos arreglos de enteros positivos A y B de tamaños M y N respectivamente, la tarea es empujar A[i] + B[i] en un nuevo arreglo para cada i = 0 a min(M, N) e imprimir el nuevo array generada al final. Si la suma es un número de dos dígitos, divida los dígitos en dos elementos, es decir, cada elemento de la array resultante debe ser un número de un solo dígito.
Ejemplos: 
 

Entrada: A = {2, 3, 4, 5}, B = {1, 12, 3} 
Salida: 3 1 5 7 5 
2 + 1 = 3 
3 + 12 = 15 = 1 5 
4 + 3 = 7 

Por lo tanto la array resultante será {3, 1, 5, 7, 5}
Entrada: A = {23, 5, 2, 7, 87}, B = {4, 67, 2, 8} 
Salida: 2 7 7 2 4 1 5 8 7 
 

Enfoque: Cree un vector para almacenar el resultado de cada suma. Si la suma es un número de un solo dígito, empuje el número en el vector; de lo contrario, divida el número en diferentes dígitos y empuje los dígitos en la array uno por uno. Imprime el contenido del vector al final.
A continuación se muestra la implementación del enfoque anterior:
 

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

// 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>
Producción: 

2 7 7 2 4 1 5 8 7

 

Complejidad del tiempo: O(max(m,n))
 

Publicación traducida automáticamente

Artículo escrito por gfg_sal_gfg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *