Open In App

Multiply N complex numbers given as strings

Improve
Improve
Like Article
Like
Save
Share
Report

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>


Output

10+-60i

Time Complexity: O(N) 
Auxiliary Space: O(N)
 



Last Updated : 01 Nov, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads