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 formatvector<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 Functionint 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 Numbersimport 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 formatdef 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 vdef 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 codeif __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 Numbersusing 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 formatfunction 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 Functionlet 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!
