算法提高 6-17复数四则运算
时间限制:1.0s 内存限制:512.0MB
设计复数库,实现基本的复数加减乘除运算。
输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔;输出时按a+bi的格式在屏幕上打印结果。参加样例输入和样例输出。
注意考虑特殊情况,无法计算时输出字符串"error"。
输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔;输出时按a+bi的格式在屏幕上打印结果。参加样例输入和样例输出。
注意考虑特殊情况,无法计算时输出字符串"error"。
样例输入
2 4 * -3 2
样例输出
-14-8i
样例输入
3 -2 + -1 3
样例输出
2+1i
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 struct num{ 7 double r,e; 8 }; 9 num add(num a,num b){ 10 num c; 11 c.r=a.r+b.r; 12 c.e=a.e+b.e; 13 return c; 14 } 15 num sub(num a,num b){ 16 b.r=-b.r; 17 b.e=-b.e; 18 return add(a,b); 19 } 20 num mul(num a,num b){ 21 num c; 22 c.r=a.r*b.r-a.e*b.e; 23 c.e=a.r*b.e+a.e*b.r; 24 return c; 25 } 26 num div(num a,num b){ 27 num c; 28 b.e=-b.e; 29 c=mul(a,b); 30 double m=b.e*b.e+b.r*b.r; 31 c.r=c.r/m; 32 c.e=c.e/m; 33 return c; 34 } 35 int main(){ 36 //freopen("D:\input.txt","r",stdin); 37 num a,b,c; 38 char cal; 39 while(cin>>a.r>>a.e>>cal>>b.r>>b.e){//scanf("%f %f",&a.r,&a.e),cin>>cal,scanf("%f %f",&cal,&b.r,&b.e)){ 40 //cout<<cal<<endl; 41 switch(cal){ 42 case '+':{ 43 c=add(a,b); 44 cout<<c.r; 45 if(c.e>0){ 46 cout<<"+"; 47 } 48 cout<<c.e<<"i"<<endl; 49 break; 50 } 51 case '-':{ 52 c=sub(a,b); 53 cout<<c.r; 54 if(c.e>0){ 55 cout<<"+"; 56 } 57 cout<<c.e<<"i"<<endl; 58 break; 59 } 60 case '*':{ 61 c=mul(a,b); 62 cout<<c.r; 63 if(c.e>0){ 64 cout<<"+"; 65 } 66 cout<<c.e<<"i"<<endl; 67 break; 68 } 69 case '/':{ 70 if(b.r==0&&b.e==0){ 71 cout<<"error"<<endl; 72 73 } 74 else{ 75 c=div(a,b); 76 cout<<c.r; 77 if(c.e>0){ 78 cout<<"+"; 79 } 80 cout<<c.e<<"i"<<endl; 81 } 82 break; 83 } 84 } 85 } 86 return 0; 87 }