首页 > 编程知识 正文

复数相乘运算,复数相乘的mchang怎么算

时间:2023-05-03 17:01:24 阅读:275753 作者:3781

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

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

#include<bits/stdc++.h>using namespace std;class Complex{int i,r;public:Complex(){}Complex(int a,int b):r(a),i(b){}Complex operator *(Complex a){Complex b;b.r=this->i*a.i-this->r*a.r;b.i=this->i*a.r+this->r*a.i;return b;}void disp(){if(i<0){if(i==-1){if(r!=0)cout<<r;cout<<"-i"<<endl;}else{if(r==0)cout<<i<<"i"<<endl;elsecout<<r<<i<<"i"<<endl;}}else if(i>0){if(i==1){if(r==0)cout<<"i"<<endl;elsecout<<r<<"+i"<<endl;}else{if(r==0)cout<<i<<"i"<<endl;elsecout<<r<<"+"<<i<<"i"<<endl;}}else{cout<<r<<endl;}}};int main(){Complex a[2];string str[2];for(int i=0;i<2;i++){cin>>str[i];int v1,v2;if(str[i][str[i].length()-1]!='i'){//只有实部v2=0;if(str[i][0]=='-')v1=-(atoi(str[i].substr(1).c_str()));elsev1=atoi(str[i].substr(0).c_str());}else{//有虚部int flagz=0,flagf=-1;for(int j=0;j<str[i].length();j++){if(str[i][j]=='+')flagz=j;if(str[i][j]=='-')flagf=j;}if(flagz==0&&flagf==-1){//没+也没-,只有正虚部 v1=0;if(str[i]=="i")v2=1;elsev2=atoi(str[i].substr(0,str[i].length()-1).c_str());}else if(flagz==0&&flagf==0){//没+且-在首位,只有负虚部v1=0; if(str[i]=="-i") v2=-1;elsev2=-(atoi(str[i].substr(1,str[i].length()-2).c_str()));}else{if(flagz){//有+,+前的是实部,虚部为正 if(str[i][0]=='-')v1=-atoi(str[i].substr(1,flagz-1).c_str());elsev1=atoi(str[i].substr(0,flagz).c_str());if(str[i][flagz+1]=='i')v2=1;elsev2=atoi(str[i].substr(flagz+1,str[i].length()-2-flagz).c_str());}else if(flagf>0){//出现-且不在首位,-前是实部,虚部为负if(str[i][0]=='-')v1=-atoi(str[i].substr(1,flagf-1).c_str());elsev1=atoi(str[i].substr(0,flagf).c_str());if(str[i][flagf+1]=='i')v2=-1;elsev2=-atoi(str[i].substr(flagf+1,str[i].length()-flagf-2).c_str());}}}a[i]=Complex(v1,v2);}(a[0]*a[1]).disp();return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。