zoukankan      html  css  js  c++  java
  • 复数相乘--运算符重载

    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;
    }
  • 相关阅读:
    使用SpringBoot校验客户端传来的数据
    在RestController中获取各种信息的方法
    SpringBoot的文件上传&下载
    Maximum upload size exceede上传文件大小超出解决
    在SpringBoot程序中记录日志
    使用IDEA配置SpringBoot热部署无效解决
    RESTful API是什么?
    IDEA如何配置jdk路径
    使用IDEA集成Spring框架时右下角警戒
    Spring框架各模块功能介绍
  • 原文地址:https://www.cnblogs.com/laixiaolian/p/5676570.html
Copyright © 2011-2022 走看看