C++ how to add,subtract,multiply,divide two complex numbers?

In this post we will discuss two programs to add,subtract,multiply and divide two complex numbers with C++. In the first program, we will not use any header or library to perform the operations. The second program will make use of the C++ complex header <complex> to perform the required operations. The two programs are given below.

i)Addition,subtraction,Multiplication and division without header file.
 
ii)Addition,subtraction,Multiplication and division with header file.


Complex number addition, subtraction, Multiplication and division without header file

In this method our program will consists of a structure that will hold the real and imaginary number of the two complex numbers. We will also define different functions for addition, subtraction , multiplication and division of the complex numbers.

In this way we can organize our program better for maintainability and better understanding. The structure is given below.

struct ComplexNumber
{
double real1 , real2 , //holds the real number
  img1 , img2 ; //holds the imaginary number
};

The double type is prefferrable because it is big enough to hold any large number.


The addition function

In the addition function, we will add the real part separately and the imaginary part separately. The complex number resulting from their individual separate sum is the resultant complex number. The function is given below.

void addition( ComplexNumber &cn )
{
cout<<“\nThe sum of the two complex numbers: \n”
   << ” (” << cn.real1 << “+” << cn.img1 << “i) + (” << cn.real2 << “+” << cn.img2 << “i) ”

    << “= ” << cn.real1+cn.real2 //addition of real part
    << “+” << cn.img1 + cn.img2 << “i” ; //addition of imaginary part
}

The subtraction function

This function will subtract the real part and the imaginary seperately. The definition of the subtraction function is shown below.

void subtraction( ComplexNumber &cn )
{
cout<<“\n\nThe subtraction of the two complex numbers: \n”
  << ” (” << cn.real1 << “+” << cn.img1 << “i) – (” << cn.real2 << “+” << cn.img2 << “i) ” ;

if( cn.img1 – cn.img2 < 0 ) /*checks if the imaginary number of the second complex number is -ve, if so put it in bracket */
{
  cout<<“= ” << cn.real1-cn.real2 << “+(” << cn.img1 – cn.img2 << “)i” ;
}
else
  cout << “= ” << cn.real1-cn.real2 << “+” << cn.img1 – cn.img2 << “i” ;
}

The if() statement is used to check if the imaginary part is a negative value, and if so, we will put the value under the bracket. The bracket will distinguish the negative sign of the imaginary value from the normal addition sign of the complex number.


The multiplication function

To get the product of the two complex numbers we simply evaluate the expression (ac-bd)+(bc+ad)i considering that a+ib and c+id are the two complex numbers. The function definition is shown below.

void multiplication( ComplexNumber &cn )
{
cout<<“\n\nThe product of the two complex numbers: \n”
  << ” (” << cn.real1 << “+” << cn.img1 << “i) * (” << cn.real2 << “+” << cn.img2 << “i) ”

  << “= ” << (cn.real1*cn.real2)- (cn.img1*cn.img2) << “+” << (cn.img1*cn.real2) + (cn.img2*cn.real1) << “i” ;
}

The division function

To divide a+bi by c+id we will perform the operation (ac+bd)/(c2 + d2) + (bc-ad)/(c2 + d2)i.

void division( ComplexNumber &cn )
{
cout<<“\n\nThe division of the two complex numbers: \n”
  << ” (” << cn.real1 << “+” << cn.img1 << “i) / (” << cn.real2 << “+” << cn.img2 << “i) ”

  << “= (” << (cn.real1*cn.real2)+(cn.img1*cn.img2) << “/” << pow(cn.real2,2) + pow(cn.img2,2)

  << “)+(” << (cn.img1*cn.real2) – (cn.img2*cn.real1) << “/” <<pow(cn.real2,2) + pow(cn.img2,2) << “)i” ;//pow() function is included in <cmath> header
}

The pow() function will calculate the square of the real and the imaginary value of the denominator complex number.


The main function

The main() function does nothing, it simply asks the user to input the two complex numbers. The whole program is shown below.

#include <iostream>
#include <cmath>

using namespace std;

//The structure that holds the complex number
struct ComplexNumber
{
double real1 , real2 ,
  img1 , img2 ;
};

//the addition function
void addition( ComplexNumber &cn )
{
cout<<“\nThe sum of the two complex numbers: \n”
   << ” (” << cn.real1 << “+” << cn.img1 << “i) + (” << cn.real2 << “+” << cn.img2 << “i) ”

    << “= ” << cn.real1+cn.real2 << “+” << cn.img1 + cn.img2 << “i” ;
}

//the subtraction function
void subtraction( ComplexNumber &cn )
{
cout<<“\n\nThe subtraction of the two complex numbers: \n”
  << ” (” << cn.real1 << “+” << cn.img1 << “i) – (” << cn.real2 << “+” << cn.img2 << “i) ” ;

if( cn.img1 – cn.img2 < 0 )
{
  cout<<“= ” << cn.real1-cn.real2 << “+(” << cn.img1 – cn.img2 << “)i” ;
}
else
  cout << “= ” << cn.real1-cn.real2 << “+” << cn.img1 – cn.img2 << “i” ;
}

//the multiplication
void multiplication( ComplexNumber &cn )
{
cout<<“\n\nThe product of the two complex numbers: \n”
  << ” (” << cn.real1 << “+” << cn.img1 << “i) * (” << cn.real2 << “+” << cn.img2 << “i) ”

  << “= ” << (cn.real1*cn.real2)- (cn.img1*cn.img2) << “+” << (cn.img1*cn.real2) + (cn.img2*cn.real1) << “i” ;
}

//the division function
void division( ComplexNumber &cn )
{
cout<<“\n\nThe division of the two complex numbers: \n”
  << ” (” << cn.real1 << “+” << cn.img1 << “i) / (” << cn.real2 << “+” << cn.img2 << “i) ”

  << “= (” << (cn.real1*cn.real2)+(cn.img1*cn.img2) << “/” << pow(cn.real2,2) + pow(cn.img2,2)

  << “)+(” << (cn.img1*cn.real2) – (cn.img2*cn.real1) << “/” << pow(cn.real2,2) + pow(cn.img2,2) << “)i” ;///sqrt() function included in <cmath> library
}

//the main() function
int main( )
{
ComplexNumber cn ;

cout<<“Enter the real and imaginary value of the first complex number\n” ;
cin >> cn.real1 >> cn.img1 ;
cin.ignore( ) ;

cout<<“\nEnter the real and imaginary value of the second complex number\n” ;
cin>> cn.real2 >> cn.img2 ;
cin.ignore( ) ;

addition(cn) ; //perform addition
subtraction(cn) ; //perform subtraction
multiplication(cn) ; //perform multiplication
division( cn ) ; //perform division

cin.get( ) ;
return 0 ;
}

The screen shot of the output with the two complex numbers as 3+i4 and 5+i8 is shown below.


 


With <complex> header

If we use the header <complex> the addition, subtraction, multiplication and division of complex numbers becomes easy.

We can declare the two complex numbers of the type complex and treat the complex numbers like the normal number and perform the addition, subtraction, multiplication and division. The program is given below.

#include <iostream>
#include <complex>

using namespace std ;

//the addition function
void add(complex<double> &c1 , complex<double> &c2)
{
cout<<“The sum of “<< c1 <<” and “<< c2 << “ complex numbers =” << c1+c2 ; //we directly add the two complex nubmers to obtain the sum
}

//the subtraction function
void subtract(complex<double> &c1 , complex<double> &c2)
{
cout<<“\n\nThe subtraction of “<< c1 <<” and “<< c2 << “ complex numbers =” << c1-c2 ; //we directly subtract the two complex nubmers to obtain the subtraction
}

//the multiplication function
void multiply(complex<double> &c1 , complex<double> &c2)
{
cout<<“\n\nThe multiplication of “<< c1 <<” and “<< c2 << “ complex numbers =” << c1*c2 ; //we directly multiply the two complex nubmers to obtain the product
}

//the division function
void divide(complex<double> &c1 , complex<double> &c2)
{
cout<<“\n\nThe division of “<< c1 <<” and “<< c2 << “ complex numbers =” << c1/c2 ; //we directly divide the two complex nubmers to obtain the value
}

//the main fucntion
int main( )
{
complex<double> c1 , c2 ; //a complex number type declaration

double c1R , c1I , c2R , c2I ;

cout<<“Enter the real and imaginary value of the first complex number \n”;
cin>> c1R >> c1I ;

cin.ignore( );

c1.real( c1R ); //Assign the real value of c1 complex as c1R
c1.imag( c1I ); //Assign the imaginary value of c1 complex as c1I

cout<<“Enter the real and imaginary value of the second complex nubmer \n”;
cin>> c2R >> c2I ;

cin.ignore( );

c2.real( c2R ); //Assign the real value of c2 complex as c2R
c2.imag( c2I ); //Assign the imaginary value of c2 complex as c2I

//adding two complex number
add( c1 , c2 );

//Subtracting two complex numbers
subtract( c1 , c2 );

//Multiplying two complex numbers
multiply( c1 , c2 );

//Dividing two complex numbers
divide( c1 , c2 );

cin.get( ) ;
return 0 ;
} 

The complex<double> type is known as template class, more about this in another post.

The output is shown below,
 
Enter the real and imaginary value of the first complex nubmer
3 4
Enter the real and imaginary value of the second complex nubmer
5 8
The sum of (3,4) and (5,8) complex numbers =(8,12)

The subtraction of (3,4) and (5,8) complex numbers =(-2,-4)

The multiplication of (3,4) and (5,8) complex numbers =(-17,44)

The division of (3,4) and (5,8) complex numbers =(0.52809,-0.0449438)