复数相乘--运算符重载

1、题目:

建立一个复数类Complex,实数和虚数是其私有数据成员;
建立复数类的无参和参数化构造函数;
建立一个 (乘号)的运算符重载,以便于对两个复数直接进行乘法运算;
建立输出函数void display(),对复数进行输出;
主函数里定义三个复数类对象c1、c2、c3.
输入格式:
输入一共一行,每行两个复数,分别为复数类c1和c2。
输出格式:
执行c3=c1
c2运算之后,调用display函数,对c3进行输出。
提示:输入或输出的复数,可能只包含实部或虚部。

输入样例:
1+2i 2+3i
输出样例:
-4+7i

2、代码:

#include<iostream>
using namespace std;
class complex
{
	private:
		int real;
		int imag;
	public:
		void set(int r,int i)
		{
			real=r;
			imag=i;
		}
		friend complex operator *(complex &c1,complex &c2);
		void display();

};

complex operator *(complex &c1,complex &c2)
{
	int re,im;
	complex c3;
	c3.real=c1.real*c2.real-(c1.imag*c2.imag);
	c3.imag=c1.real*c2.imag+c1.imag*c2.real;
	return c3;
}
void complex::display()
{
	if(imag<0)
	{
		if(imag==-1)
		{			
			if(real==0)
			{
				cout<<"-i"<<endl;
			}
			else
			{
				cout<<real<<"-i"<<endl;
			}

		}
		
		else
		{
			if(real==0)
			{
				cout<<imag<<"i"<<endl;
			}
			else
			{
				cout<<real<<imag<<"i"<<endl;
			}
		}
	}
	
	else if(imag>0)
	{
		if(imag==1)
		{
			if(real==0)
			{
				cout<<"i"<<endl;
			}
			else

			{
				cout<<real<<"+i"<<endl;
			}
		}
		
		else
		{
			if(real==0)
			{
				cout<<imag<<"i"<<endl;
			}
			else
			{
				cout<<real<<"+"<<imag<<"i"<<endl;
			}
		}

	}
	
	if(imag==0)
	{
		cout<<real<<endl;
	}

}

int main()
{
	complex a,b,c;
	string str[3];
	int re[20]= {0},im[20]= {0};
	for(int i=0; i<2; i++)
	{
		int count5=1;
		cin>>str[i];
		int o=0;
		int k=-1;
		
		if(str[i][str[i].size()-1]!='i')
		{
			for(int l=str[i].size()-1; l>=0; l--)
			{
				re[i]=str[i][l]-'0';
			}
		}
		
		else
		{
			for(int j=0; j<str[i].size(); j++)
			{

				if(str[i][j]=='-')
				{
					k=j;
				}
				if(str[i][j]=='+')
				{
					o=1;
				}
			}
			
			if(o==0&&k==-1)
			{
				re[i]=0;
				
				if(str[i][str[i].size()-1]==str[i][0])
				{
					im[i]=1;
				}
				
				else
				{
					for(int l=str[i].size()-2; l>=0; l--)
					{
						im[i]+=(str[i][l]-'0')*count5;
						count5*=10;
					}
				}
				
			}
			
			else if(o==0&&k==0)
			{
				if(str[i]=="-i")
				{
					im[i]=1;
				}
				else
				{
					for(int l=str[i].size()-2; l>0; l--)
					{
						im[i]+=(str[i][l]-'0')*count5;
						count5*=10;
					}
				}
				im[i]=-1*im[i];
				
			}

			else
			{
				for(int j=0; j<str[i].size(); j++)
				{
					int count1=1;
					int count2=1;
					int count3=1;
					int count4=1;
					if(str[i][j]=='+')
					{
						for(int t=j-1; t>=0; t--)
						{
							re[i]+=(str[i][t]-'0')*count1;
							count1*=10;
						}
						if(str[i][j+1]=='i')
						{
							im[i]=1;
						}
						else
						{
							for(int t=str[i].size()-2; t>j; t--)
							{
								im[i]+=(str[i][t]-'0')*count2;
								count2*=10;
							}
						}

					}
					if(str[i][j]=='-'&&j!=0)
					{
						for(int t=j-1; t>=0; t--)
						{
							re[i]+=(str[i][t]-'0')*count3;
							count3*=10;
						}
						if(str[i][j+1]=='i')
						{
							im[i]=1;
						}
						else
						{
							for(int t=str[i].size()-2; t>j; t--)
							{
								im[i]+=(str[i][t]-'0')*count4;
								count4*=10;
							}
						}
						im[i]=-1*im[i];
					}
					if(str[i][0]=='-')
					{
						re[i]=-1*re[i];
					}
				}

			}
		}
	}
	a.set(re[0],im[0]);
	b.set(re[1],im[1]);
	c=a*b;
	c.display();
	return 0;
}
posted @ 2016-07-16 15:23  laixl  阅读(3419)  评论(0编辑  收藏  举报