我只能說複數這個東西是真的噁心,沒話講
由於你們都知道的,輸入格式就不少樣,輸出也不少樣。
只得哇的一聲哭出來。
由於我是c++運算符重載要用,因此手打了「一萬個if」
你們只看clss Complex裏的display和inial就能夠
(display輸出,inial輸入)c++
void disply(){ if (imag==0){ cout<<real; }//虛部爲0,直接輸出實部 if (imag==1||imag==-1){ if (imag==1){ if (real==0){ cout<<"i";} else cout<<real<<"+"<<"i"; }//由於會出現n+i或者n—i的狀況,因此判斷一手 if (imag==-1){ if (real==0){ cout<<"-"<<"i";}//-i的狀況單獨判斷 else cout<<real<<"-"<<"i"; } } if (imag<-1||imag>1){ if (imag<0){ if (real==0){ cout<<imag<<"i";} else cout<<real<<imag<<"i"; } if (imag>0){ if (real==0){ cout<<imag<<"i";} else cout<<real<<"+"<<imag<<"i"; } }//這就是比較標準的輸出,例如a+bi這種 }
固然輸出不是最噁心的,輸入纔是。
我輸出大概打了半個小說,而輸出用了我一節晚自習。
固然也有我我的因素,可是狀況的多樣性和操做的複雜性,沒得說數組
Complex inial(){ string s; cin>>s; char c[100],real[100],imag[100]; strcpy(c, s.c_str());//獲得便於操做的字符數組 int len1=s.length();//獲得字符串的有效長度 int sum=0; int real1=0,imag1=0; for (int i=0;i<len1;i++){ if (c[i]=='+'||c[i]=='-'||c[i]=='i'){ sum++; } }//判斷+ - 和i的個數 if (sum==0){ real1=atoi(c); } //若是符號是0,那麼只多是實部 if (sum==1){ if (c[len1-1]=='i')//最後一位是i的狀況 { if (len1==1){ imag1=1; }//長度是1只能是i,只有i沒有1i這種操做 else imag1=atoi(c);//長度不爲1,只能是虛部, } else{ real1=atoi(c);//最後一位不是i,那麼只能是負數,直接轉化就ok } } if (sum==2){ if (c[len1-2]=='+'){ real1=atoi(c); imag1=1;//n+i } if (c[len1-2]=='-'){ real1=atoi(c); imag1=-1;//n-i } if (c[0]=='-'){ if (c[1]=='i') imag1=-1;//-i else imag1=atoi(c); } if (c[len1-2]!='+'&&c[len1-2]!='-'){//找符號,騷氣的操做來了,a+-bi的形式 int pos=1;//獲得子串長度 for (pos;pos<len1;pos++) { if (c[pos]=='+'||c[pos]=='-') break; } if (c[pos]=='+'){ real1=atoi(c); string c_other=s.substr(0,pos); real1=atoi(c_other.c_str()); string c_others=s.substr(pos+1,s.length()-pos-2); imag1=atoi(c_others.c_str()); } if (c[pos]=='-'){ real1=atoi(c); string c_other=s.substr(0,pos); real1=atoi(c_other.c_str()); string c_others=s.substr(pos+1,s.length()-pos-2); imag1=-atoi(c_others.c_str()); } } }//我以爲百度都ok的 if (sum==3){ if (c[len1-2]=='+'){ real1=atoi(c); imag1=1; } if (c[len1-2]=='-'){ real1=atoi(c); imag1=-1; } if (c[len1-2]!='+'&&c[len1-2]!='-'){ int pos=1; for (pos;pos<len1;pos++) { if (c[pos]=='+'||c[pos]=='-') break; } if (c[pos]=='+'){ real1=atoi(c); string c_other=s.substr(0,pos); real1=atoi(c_other.c_str()); string c_others=s.substr(pos+1,s.length()-pos-2); imag1=atoi(c_others.c_str()); } if (c[pos]=='-'){ real1=atoi(c); string c_other=s.substr(0,pos); real1=atoi(c_other.c_str()); string c_others=s.substr(pos+1,s.length()-pos-2); imag1=-atoi(c_others.c_str());//一個道理 } } } return Complex(real1,imag1);//用了構造函數初始化,你們忽略就ok }
整體來講就這樣,具體我以爲本身寫出虛部是否爲0,+-i,而後+-ni
實部爲0,+-n,而後排列組合一下
祝你們好運hhh函數