# include<stdio.h># include<stdlib.h># include<string.h>int Q[4],q=0;int zh(char s[],int begin,int end) //负责将字符串数字转换为整型数字{int value=0; for(int h=begin;h<end;h++){ value = value*10; value = value + (s[h]-'0');} return value;}void HQSS(char s[]) //负责从字符串中提取出实部和虚部 要对字符串进行分类讨论{int l = strlen(s);int i,flag1=0; int h,shi=0,fu=0; char fuhaofu='0';for(i=0;i<l;i++) //第一类 实部和虚部都存在 { if((s[i]=='+'&& i!=0) || (s[i]=='-'&& i!=0)) //实部和虚部间的正负符号 { fuhaofu=s[i]; if(s[0]=='-') //要讨论实部和虚部的正负情况 { shi = zh(s,1,i); shi = - shi; } else { shi = zh(s,0,i); } fu= zh(s,i+1,l-1); if(fuhaofu=='-') { fu = - fu; } flag1 = 1; break; } } int flag2=0; if(flag1==0) //第二类只存在实部和只存在虚部 { if(s[l-1]=='i') //只存在虚部 { if(s[0]=='-') { fu = zh(s,1,l-1); fu = -fu; fuhaofu = '-'; } else { fu = zh(s,0,l-1); } } else //只存在实部 { if(s[0]=='-') { shi= zh(s,1,l); shi = - shi; } else { shi = zh(s,0,l); } flag2 = 1; } } if(fu==0 && flag2==0) //因为i和-i没有字符串数字 所以无法提取要特殊讨论 { if(fuhaofu=='-') { fu = -1; } else { fu = 1; } } Q[q] = shi;q++; Q[q] = fu;q++;}int main() { char a[10],b[10]; scanf("%s",a); scanf("%s",b); HQSS(a); HQSS(b); int shi,fu; shi = Q[0]+Q[2]; fu = Q[1]+Q[3]; if(shi==0&&fu==0) { printf("0"); } else { if(shi!=0) printf("%d",shi); if(fu>0&&fu!=1&&fu!=-1&&shi!=0) printf("+%di",fu); if(fu>0&&fu!=1&&fu!=-1&&shi==0) printf("%di",fu); if(fu<0&&fu!=1&&fu!=-1) printf("%di",fu); if(fu==1&&shi!=0) printf("+i"); if(fu==1&&shi==0) printf("i"); if(fu==-1) printf("-i"); } system("pause"); return 0; }
0 0