湖北民院oj复数的和

Problem Description
计算两个复数之和。
Input Description
在两行中分别输入两个复数a+bi,a和b均为正整数。
Output Description
在一行中输出两个复数的和。
Sample Input
1+2i
3+4i
Sample Output
(1+2i)+(3+4i)=4+6i

写个复数类,一个实数,一个虚数,做个+重载就可以了。或者直接读取4个数分别计算也行。

img

代码如下:

#include <stdio.h>

void trans(char* s,int* a,int* b,char* ch)
{
    int i=0;
    
    //计算a1
    *a=0;
    *b=0;
    while(s[i]>='0'&&s[i]<='9')
    {
        *a = *a*10 + s[i]-'0';
        i++;
    }
    //过滤空格
    while(s[i]==' ') i++;
    *ch = s[i];
    i++;
    //过滤空格
    while(s[i]==' ') i++;
    //计算b
    
    while(s[i]>='0'&&s[i]<='9')
    {
        *b = *b*10 + s[i]-'0';
        i++;
    }
}



int main()
{
    char s1[20],s2[20];
    int a1,a2,b1,b2;
    int c,d;
    char ch1='+',ch2='+';
    
    scanf("%s",s1);
    scanf("%s",s2);
    
    trans(s1,&a1,&b1,&ch1);
    trans(s2,&a2,&b2,&ch2);

    

    if(ch1=='-')
        b1 = -b1;
    if(ch2=='-')
        b2 = -b2;

    c = a1+a2;
    d = b1+b2;


    if(d>0)
        printf("(%d%c%di)+(%d%c%di)=%d+%di",a1,ch1,b1,a2,ch2,b2,c,d);
    else if(d==0)
        printf("(%d%c%di)+(%d%c%di)=%d",a1,ch1,b1,a2,ch2,b2,c);
    else
        printf("(%d%c%di)+(%d%c%di)=%d%di",a1,ch1,b1,a2,ch2,b2,c,d);
    return 0;
}