C 语言程序设计实践 9.5 复数相加

来源:互联网 发布:js int to string 补0 编辑:程序博客网 时间:2024/05/29 19:40


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;    }



0 0
原创粉丝点击