Given N Complex Numbers in the form of Strings, the task is to print the multiplication of these N complex numbers.
Examples:
Input: N = 3, V = { 3 + 1i, 2 + 1i, 5 + -7i }
Output: 10+-60i
Explanation:
Firstly, we will multiply (3+1i) and (2+1i) to yield 5+5i. In the next step, we will multiply 5+5i and -5+-7i to yield the final result 10+-60i.Input: N = 3, V = { “7+4i”, “-12+1i”, “-16+-7i”, “12+18i” }
Output: -9444+35442i
Approach
- Firstly, start iterating from the beginning and take the first 2 Strings and erase both of them.
- Next, convert the string into a number with appropriate signs. Store the Real Part and the Imaginary Part of the String in separate variables. Take a as the real part of the first string while b as the imaginary part of the first string. Take c as the real part of the second string while d as the imaginary part of the second string.
- Next we will calculate the resultant values for the real by calculating the product of a and c and subtracting it with the product of b and subtracting with the product of b and d. For the Imaginary Part, we will calculate the sum of the product of a and d, along with the product of the b and c.
- We will then generate a temporary string to take the sum of real and imaginary values that has been calculated earlier.
- We will push the resultant string into the vector. Repeat the above steps until there is only one remaining element in the vector.
- Return the last remaining element in the vector, which is the desired answer.
Below is the implementation of our above approach:
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; } |
Java
// Java Program to multiply // N complex Numbers import java.util.*; class GFG { // Function which returns the // string in digit format static ArrayList<Integer> findnum(String s1) { ArrayList<Integer> v = new ArrayList<Integer>(); // 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.charAt( 0 ) == '-' ) { sa = 1 ; i = 1 ; } // Extract the real number while (Character.isDigit(s1.charAt(i))) { a = a * 10 + (s1.charAt(i) - '0' ); i++; } if (s1.charAt(i) == '+' ) { sb = 0 ; i += 1 ; } if (s1.charAt(i) == '-' ) { sb = 1 ; i += 1 ; } // Extract the imaginary part while (i < s1.length() && Character.isDigit(s1.charAt(i))) { b = b * 10 + (s1.charAt(i) - '0' ); i++; } if (sa != 0 ) a *= - 1 ; if (sb != 0 ) b *= - 1 ; v.add(a); v.add(b); return v; } static String complexNumberMultiply(ArrayList<String> v) { // if size==1 means we reached at result while (v.size() != 1 ) { // Extract the first two elements ArrayList<Integer> v1 = findnum(v.get( 0 )); ArrayList<Integer> v2 = findnum(v.get( 1 )); // Remove them v.remove( 0 ); v.remove( 0 ); // Calculate and store the real part int r = (v1.get( 0 ) * v2.get( 0 ) - v1.get( 1 ) * v2.get( 1 )); // Calculate and store the imaginary part int img = v1.get( 0 ) * v2.get( 1 ) + v1.get( 1 ) * v2.get( 0 ); String res = "" ; // Append the real part res += String.valueOf(r); res += '+' ; // Append the imaginary part res += String.valueOf(img) + 'i' ; // Insert into List v.add( 0 , res); } return v.get( 0 ); } // Driver Function public static void main(String[] args) { int n = 3 ; ArrayList<String> v = new ArrayList<String>(); v.add( "3+1i" ); v.add( "2+1i" ); v.add( "-5+-7i" ); System.out.println(complexNumberMultiply(v)); } } // This code is contributed by phasing17 |
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 |
C#
// C# Program to multiply // N complex Numbers using System; using System.Linq; using System.Collections.Generic; class GFG { // Function which returns the // string in digit format static List< int > findnum( string s1) { List< int > v = new List< int >(); // 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 (Char.IsDigit(s1[i])) { a = a * 10 + (s1[i] - '0' ); i++; } if (s1[i] == '+' ) { sb = 0; i += 1; } if (s1[i] == '-' ) { sb = 1; i += 1; } // Extract the imaginary part while (i < s1.Length && Char.IsDigit(s1[i])) { b = b * 10 + (s1[i] - '0' ); i++; } if (sa != 0) a *= -1; if (sb != 0) b *= -1; v.Add(a); v.Add(b); return v; } static string complexNumberMultiply(List< string > v) { // if size==1 means we reached at result while (v.Count != 1) { // Extract the first two elements List< int > v1 = findnum(v[0]); List< int > v2 = findnum(v[1]); // Remove them v.RemoveAt(0); v.RemoveAt(0); // Calculate and store the real part int r = (v1[0] * v2[0] - v1[1] * v2[1]); // Calculate and store the imaginary part int img = v1[0] * v2[1] + v1[1] * v2[0]; string res = "" ; // Append the real part res += Convert.ToString(r); res += '+' ; // Append the imaginary part res += Convert.ToString(img) + 'i' ; // Insert into List v.Insert(0, res); } return v[0]; } // Driver Function public static void Main( string [] args) { int n = 3; List< string > v = new List< string >(); v.Add( "3+1i" ); v.Add( "2+1i" ); v.Add( "-5+-7i" ); Console.WriteLine(complexNumberMultiply(v)); } } // This code is contributed by phasing17 |
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> |
10+-60i
Time Complexity: O(N)
Auxiliary Space: O(N)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!