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