Friday, January 10, 2025
Google search engine
HomeData Modelling & AIMultiply N complex numbers given as strings

Multiply N complex numbers given as strings

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)
 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments