Multiplica N números complejos dados como strings

Dados N números complejos en forma de strings, la tarea es imprimir la multiplicación de estos N números complejos.

Ejemplos: 

Entrada: N = 3, V = { 3 + 1i, 2 + 1i, 5 + -7i } 
Salida: 10+-60i 
Explicación: 
Primero, multiplicaremos (3+1i) y (2+1i) para obtener 5+ 5i. En el siguiente paso, multiplicaremos 5+5i y -5+-7i para obtener el resultado final 10+-60i .

Entrada: N = 3, V = { “7+4i”, “-12+1i”, “-16+-7i”, “12+18i” } 
Salida: -9444+35442i 

 

Acercarse 

  • En primer lugar, comience a iterar desde el principio y tome las primeras 2 strings y borre ambas.
  • Luego, convierta la string en un número con los signos apropiados. Almacene la parte real y la parte imaginaria de la string en variables separadas. Tome a como la parte real de la primera cuerda y b como la parte imaginaria de la primera cuerda. Toma c como la parte real de la segunda cuerda mientras que d es la parte imaginaria de la segunda cuerda.
  • A continuación calcularemos los valores resultantes para el real calculando el producto de a y c y restándolo con el producto de b y restando con el producto de b y d . Para la Parte Imaginaria, calcularemos la suma del producto de a y d , junto con el producto de b y c .
  • Luego generaremos una string temporal para tomar la suma de los valores reales e imaginarios que se calcularon anteriormente.
  • Introduciremos la string resultante en el vector. Repita los pasos anteriores hasta que solo quede un elemento en el vector.
  • Devuelve el último elemento que queda en el vector, que es la respuesta deseada.

A continuación se muestra la implementación de nuestro enfoque anterior:

C++

// C++ Program to multiply
// N complex Numbers
#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
 
// Function which returns the
// string in digit format
vector<long long int> findnum(string s1)
{
    vector<long long int> v;
    // a : real
    // b : imaginary
    int a = 0, b = 0;
    int sa = 0, sb = 0, i = 0;
    // sa : sign of a
    // sb : sign of b
    if (s1[0] == '-') {
        sa = 1;
        i = 1;
    }
    // Extract the real number
    while (isdigit(s1[i])) {
        a = a * 10 + (int(s1[i]) - 48);
        i++;
    }
 
    if (s1[i] == '+') {
        sb = 0;
        i += 1;
    }
 
    if (s1[i] == '-') {
        sb = 1;
        i += 1;
    }
 
    // Extract the imaginary part
    while (i < s1.length() && isdigit(s1[i])) {
        b = b * 10 + (int(s1[i]) - 48);
        i++;
    }
 
    if (sa)
        a *= -1;
 
    if (sb)
        b *= -1;
 
    v.push_back(a);
    v.push_back(b);
 
    return v;
}
 
string complexNumberMultiply(vector<string> v)
{
    // if size==1 means we reached at result
    while (v.size() != 1) {
        // Extract the first two elements
        vector<ll> v1 = findnum(v[0]);
        vector<ll> v2 = findnum(v[1]);
 
        // Remove them
        v.erase(v.begin());
        v.erase(v.begin());
 
        // Calculate and store the real part
        ll r = (v1[0] * v2[0] - v1[1] * v2[1]);
        // Calculate and store the imaginary part
        ll img = v1[0] * v2[1] + v1[1] * v2[0];
 
        string res = "";
        // Append the real part
        res += to_string(r);
        res += '+';
        // Append the imaginary part
        res += to_string(img) + 'i';
 
        // Insert into vector
        v.insert(v.begin(), res);
    }
 
    return v[0];
}
 
// Driver Function
int main()
{
    int n = 3;
    vector<string> v = { "3+1i",
                         "2+1i", "-5+-7i" };
 
    cout << complexNumberMultiply(v) << "\n";
 
    return 0;
}

Python3

# Python3 program to multiply
# N complex Numbers
 
# Function which returns the
# in digit format
def findnum(s1):
     
    v = []
     
    # a : real
    # b : imaginary
    a = 0
    b = 0
    sa = 0
    sb = 0
    i = 0
     
    # sa : sign of a
    # sb : sign of b
    if (s1[0] == '-'):
        sa = 1
        i = 1
 
    # Extract the real number
    while (s1[i].isdigit()):
        a = a * 10 + (int(s1[i]))
        i += 1
 
    if (s1[i] == '+'):
        sb = 0
        i += 1
 
    if (s1[i] == '-'):
        sb = 1
        i += 1
 
    # Extract the imaginary part
    while (i < len(s1) and s1[i].isdigit()):
        b = b * 10 + (int(s1[i]))
        i += 1
 
    if (sa):
        a *= -1
 
    if (sb):
        b *= -1
 
    v.append(a)
    v.append(b)
 
    return v
 
def complexNumberMultiply(v):
     
    # If size==1 means we reached at result
    while (len(v) != 1):
         
        # Extract the first two elements
        v1 = findnum(v[0])
        v2 = findnum(v[1])
 
        # Remove them
        del v[0]
        del v[0]
 
        # Calculate and store the real part
        r = (v1[0] * v2[0] - v1[1] * v2[1])
         
        # Calculate and store the imaginary part
        img = v1[0] * v2[1] + v1[1] * v2[0]
 
        res = ""
         
        # Append the real part
        res += str(r)
        res += '+'
         
        # Append the imaginary part
        res += str(img) + 'i'
 
        # Insert into vector
        v.insert(0, res)
 
    return v[0]
 
# Driver code
if __name__ == '__main__':
     
    n = 3
    v = [ "3+1i", "2+1i", "-5+-7i" ]
 
    print(complexNumberMultiply(v))
 
# This code is contributed by mohit kumar 29

Javascript

<script>
 
// JavaScript Program to multiply
// N complex Numbers
 
// Function which returns the
// string in digit format
function findnum(s1)
{
    let v = [];
     
    // a : real
    // b : imaginary
    let a = 0, b = 0;
    let sa = 0, sb = 0, i = 0;
     
    // sa : sign of a
    // sb : sign of b
    if (s1[0] == '-') {
        sa = 1;
        i = 1;
    }
     
    // Extract the real number
    while (s1.charCodeAt(i)>='0'.charCodeAt(0) && s1.charCodeAt(i)<='9'.charCodeAt(0)) {
        a = a * 10 + (s1.charCodeAt(i) - 48);
        i++;
    }
 
    if (s1[i] == '+') {
        sb = 0;
        i += 1;
    }
 
    if (s1[i] == '-') {
        sb = 1;
        i += 1;
    }
 
    // Extract the imaginary part
    while (i < s1.length && s1.charCodeAt(i)>='0'.charCodeAt(0) && s1.charCodeAt(i)<='9'.charCodeAt(0)) {
        b = b * 10 + (s1.charCodeAt(i) - 48);
        i++;
    }
 
    if (sa)
        a *= -1;
 
    if (sb)
        b *= -1;
 
    v.push(a);
    v.push(b);
 
    return v;
}
 
function complexNumberMultiply(v)
{
    // if size==1 means we reached at result
    while (v.length != 1) {
        // Extract the first two elements
        let v1 = findnum(v[0]);
        let v2 = findnum(v[1]);
 
        // Remove them
        v.shift();
        v.shift();
 
        // Calculate and store the real part
        let r = (v1[0] * v2[0] - v1[1] * v2[1]);
        // Calculate and store the imaginary part
        let img = v1[0] * v2[1] + v1[1] * v2[0];
 
        let res = "";
        // Append the real part
        res += r.toString();
        res += '+';
        // Append the imaginary part
        res += img.toString() + 'i';
 
        // Insert into vector
        v.unshift(res);
    }
 
    return v[0];
}
 
// Driver Function
 
let n = 3;
let v = [ "3+1i", "2+1i", "-5+-7i" ];
 
document.write(complexNumberMultiply(v),"</br>")
 
// This code is contributed by Shinjanpatra
 
</script>
Producción: 

10+-60i

 

Complejidad temporal: O(N)  
Espacio auxiliar: O(N)
 

Publicación traducida automáticamente

Artículo escrito por ajaykr00kj 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 *