按数学规范输入输出复数:
a+bi ;
注意:
i, -i,
a+i, a-i,
a, bi
完整代码展示
#include<iostream>
#include<cmath>
using namespace std;
const int Max = 100;
class Complex{
double real, image;
public:
Complex(double r=0,double i=0):real(r),image(i){}
~Complex(){}
void setRI(double r,double i);
void display();
Complex operator+(Complex &b);
friend Complex getC(char *pch);
};
Complex getC(char *pch);
int main(){
char ch[Max]="\0";
Complex a;
while(cin>>ch){
Complex b=getC(ch);
a=a+b;
}
a.display();
return 0;
}
Complex getC(char *pch){
int index = 0, one=0, two=0, signOne=0, signTwo=0, signPoint=0;
Complex c;
if(pch[0]=='i') c.setRI(0,1);
else{
if(pch[0]=='-'){
signOne=1, index++;
if(pch[1]=='i') c.setRI(0,-1);
}
for(int i=index; pch[i]>='0'&&pch[i]<='9'||pch[i]=='.'; i++, index++){
if(pch[i]=='.'){ signPoint=1; continue; }
if(signPoint){ one=one+pow(0.1,signPoint)*int(pch[i]-48); signPoint++; }
else one=one*10+int(pch[i]-48);
}
if(signOne) one=-one;
if(one){
if(pch[index]=='i') c.setRI(0,one) ;
else if(pch[index]=='+'||pch[index]=='-'){
if(pch[index]=='-') signTwo=1 ;
index++, signPoint=0;
if(pch[index]=='i'){
if(signTwo) c.setRI(one,-1);
else c.setRI(one,1);
}
for(int i=index; pch[i]>='0'&&pch[i]<='9'||pch[i]=='.'; i++, index++){
if(pch[i]=='.'){ signPoint=1; continue; }
if(signPoint){ two=two+pow(0.1,signPoint)*int(pch[i]-48); signPoint++; }
else two=two*10+int(pch[i]-48);
}
if(signTwo) two=-two;
if(two) c.setRI(one,two);
}else c.setRI(one,0);
}
}
return c ;
}
void Complex::setRI(double r,double i){ real=r, image=i; }
Complex Complex::operator+(Complex &b){
real=real+b.real;
image=image+b.image;
return *this;
}
void Complex::display(){
if(real==0){
if(image==1) cout<<'i';
else if(image==-1) cout<<"-i";
else if(image)cout<<image<<'i';
else cout<<image;
}else{
if(image==1) cout<<real<<"+i";
else if(image==-1) cout<<real<<"-i";
else if(image>0) cout<<real<<'+'<<image<<'i';
else if(image<0)cout<<real<<image<<'i';
else cout<<real ;
}
}
输入数据函数
Complex getC(char *pch){
int index = 0, one=0, two=0, signOne=0, signTwo=0, signPoint=0;
Complex c ;
if(pch[0]=='i') c.setRI(0,1);
else{
if(pch[0]=='-'){
signOne=1, index++;
if(pch[1]=='i') c.setRI(0,-1);
}
for(int i=index; pch[i]>='0'&&pch[i]<='9'||pch[i]=='.'; i++, index++){
if(pch[i]=='.'){ signPoint=1; continue; }
if(signPoint){ one=one+pow(0.1,signPoint)*int(pch[i]-48); signPoint++; }
else one=one*10+int(pch[i]-48);
}
if(signOne) one=-one;
if(one){
if(pch[index]=='i') c.setRI(0,one) ;
else if(pch[index]=='+'||pch[index]=='-'){
if(pch[index]=='-') signTwo=1 ;
index++, signPoint=0;
if(pch[index]=='i'){
if(signTwo) c.setRI(one,-1);
else c.setRI(one,1);
}
for(int i=index; pch[i]>='0'&&pch[i]<='9'||pch[i]=='.'; i++, index++){
if(pch[i]=='.'){ signPoint=1; continue; }
if(signPoint){ two=two+pow(0.1,signPoint)*int(pch[i]-48); signPoint++; }
else two=two*10+int(pch[i]-48);
}
if(signTwo) two=-two;
if(two) c.setRI(one,two);
}else c.setRI(one,0);
}
}
return c ;
}