AC代码:
#include <stdio.h> #include <math.h> #include <string.h> #define LEN strlen(arr) typedef int Place; int main() { char arr[30]; int i,len,Real=0,Imag=0,plus=0,minus=0,cnt_i=0; Place k_p,k_i,k_m[2],*p=k_m; while (~scanf("%s",arr)){ for (i=0;i<LEN;i++){ if (arr[i]=='+'){ plus++; k_p=i; }else if (arr[i]=='-'){ minus++; *p++=i; }else if (arr[i]=='i'){ cnt_i++; k_i=i; } } len=k_m[1]-1; if (plus==0&&minus==0&&cnt_i==0) for (i=0;i<LEN;i++)//555 Real+=(arr[i]-'0')*pow(10,LEN-i-1); else if (plus==0&&minus==0&&cnt_i==1){ if (LEN==1)//i Imag++; else{// 555i for (i=0;i<LEN-1;i++) Imag+=(arr[i]-'0')*pow(10,LEN-i-2); } } else if (plus==0&&minus==1&&cnt_i==0){//-555 for (i=1;i<LEN;i++) Real-=(arr[i]-'0')*pow(10,LEN-i-1); } else if (plus==0&&minus==1&&cnt_i==1){ if (k_m[0]==0){ if (LEN==2)//-i Imag--; else{//-555i for (i=1;i<LEN-1;i++) Imag-=(arr[i]-'0')*pow(10,LEN-i-2); } }else{ if (arr[LEN-2]=='-'){//555-i Imag--; for (i=0;i<k_m[0];i++) Real+=(arr[i]-'0')*pow(10,k_m[0]-i-1); }else{//555-555i for (i=0;i<k_m[0];i++) Real+=(arr[i]-'0')*pow(10,k_m[0]-i-1); for (i=k_m[0]+1;i<LEN-1;i++) Imag-=(arr[i]-'0')*pow(10,LEN-i-2); } } } else if (plus==1&&minus==0&&cnt_i==1){//555+555i OR 555+i if (arr[LEN-2]=='+'){//555+i Imag++; for (i=0;i<k_p;i++) Real+=(arr[i]-'0')*pow(10,k_p-i-1); }else{//555+555i for (i=0;i<k_p;i++) Real+=(arr[i]-'0')*pow(10,k_p-i-1); for (i=k_p+1;i<LEN-1;i++) Imag+=(arr[i]-'0')*pow(10,LEN-i-2); } } else if (plus==0&&minus==2&&cnt_i==1){//-555-555i OR -555-i if (arr[LEN-2]=='-'){//-555-i Imag--; for (i=1;i<k_m[1];i++) Real-=(arr[i]-'0')*pow(10,len-i); }else{//-555-555i for (i=1;i<k_m[1];i++) Real-=(arr[i]-'0')*pow(10,len-i); for (i=k_m[1]+1;i<LEN-1;i++) Imag-=(arr[i]-'0')*pow(10,LEN-i-2); } } else if (plus==1&&minus==1&&cnt_i==1){//-555+555i OR -555+i if (arr[LEN-2]=='+'){ Imag++; for (i=1;i<k_p;i++) Real-=(arr[i]-'0')*pow(10,k_p-1-i); } else{ for (i=1;i<k_p;i++) Real-=(arr[i]-'0')*pow(10,k_p-1-i); for (i=k_p+1;i<LEN-1;i++) Imag+=(arr[i]-'0')*pow(10,LEN-i-2); } } plus=0,minus=0,cnt_i=0,p=k_m; } if (Real==0&&Imag==0) printf("0\n"); else if (Real==0&&Imag==1) printf("i\n"); else if (Real==0&&Imag==-1) printf("-i\n"); else if (Real==0) printf("%di\n",Imag); else if (Real!=0&&Imag==0) printf("%d\n",Real); else if (Real!=0&&Imag==1) printf("%d+i\n",Real); else if (Real!=0&&Imag==-1) printf("%d-i\n",Real); else if (Real!=0&&Imag>0) printf("%d+%di\n",Real,Imag); else if (Real!=0&&Imag<0) printf("%d%di\n",Real,Imag); return 0; }