设计复数库,实现基本的复数加减乘除运算。
输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔;输出时按a+bi的格式在屏幕上打印结果。参加样例输入和样例输出。
注意考虑特殊情况,无法计算时输出字符串"error"。
输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔;输出时按a+bi的格式在屏幕上打印结果。参加样例输入和样例输出。
注意考虑特殊情况,无法计算时输出字符串"error"。
样例输入
2 4 * -3 2
样例输出
-14-8i
样例输入
3 -2 + -1 3
样例输出
2+1i
这个题只要知道了四则运算公式,6 -3 / 0 3就不难写出,关键是输出,有一个样例是这样的3 -2 / -1 3,它的输出是-0.9-0.7i,还有一个样例6 -3 / 0 3,它的输出是-1-2i,因为除法可能会出现小数,当除法除出来是小数的时候输出小数,不要多余的零,不是小数的时候输出整数,这种情况下定义结果为double类型
用printf输出,然而输出的时候用%lf的话会出现小数点后面多余的0,因此我选择采用%g。%g用来输出实数,根据数值大小,自动选f或e格式不输出多余的零。
#include <iostream>
using namespace std;
void cal(int a,int b,char ope,int c,int d)
{
if(c==0&&d==0&&ope=='/')
{
cout<<"error"<<endl;
return;
}
double anse,ansv;
if(ope=='+')
{
anse=a+c;
ansv=b+d;
}
if(ope=='-')
{
anse=a-c;
ansv=b-d;
}
if(ope=='*')
{
anse=(a*c-b*d);
ansv=(b*c+a*d);
}
if(ope=='/')
{
anse=(a*c+b*d)*1.0/(c*c+d*d);
ansv=(b*c-a*d)*1.0/(c*c+d*d);
}
if(anse)
if(ansv>0)
printf("%g+",anse);
else
printf("%g",anse);
if(ansv)
printf("%gi",ansv);
}
int main()
{
int a,b,c,d;
char ope;
cin>>a>>b>>ope>>c>>d;
cal(a,b,ope,c,d);
return 0;
}