首页 > 代码库 > 算法提高 6-17复数四则运算

算法提高 6-17复数四则运算

 算法提高 6-17复数四则运算  
时间限制:1.0s   内存限制:512.0MB
    
  设计复数库,实现基本的复数加减乘除运算。
  输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔;输出时按a+bi的格式在屏幕上打印结果。参加样例输入和样例输出。
  注意考虑特殊情况,无法计算时输出字符串"error"。
样例输入
2 4 * -3 2
样例输出
-14-8i
样例输入
3 -2 + -1 3
样例输出
2+1i
有一组数据就是通不过。
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#define for(i,x,n) for(int i=x;i<n;i++)
#define ll long long int
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define MAX_N 50005

using namespace std;

int main()
{
    //freopen("data.txt", "r", stdin);
    //freopen("data.out", "w", stdout);
    double a,b,c,d;
    char cc;
    scanf("%lf %lf",&a,&b);
    getchar();
    scanf("%c",&cc);
    scanf("%lf %lf",&c,&d);
    if(cc==+){
        if(b+d>0){
            printf("%g+%gi",a+c,b+d);
        }else if(b+d<0){
            printf("%g%gi",a+c,b+d);
        }else if(b+d==0){
            printf("%g",a+c);
        }
    }
    if(cc==-){
        if(b-d>0){
            printf("%lf+%lfi",a-c,b-d);
        }else if(b-d<0){
            printf("%lf%lfi",a-c,b-d);
        }else if(b-d==0){
            printf("%lf",a-c);
        }
    }
    if(cc==*){
        if(a*c-b*d==0&&a*d+b*c!=0){
            printf("%gi",a*d+b*c);
        }else if(a*d+b*c==0&&a*c+b*d!=0){
            printf("%g",a*c-b*d);
        }else{
            if(a*d+b*c<0){
                printf("%g%gi",a*c-b*d,a*d+b*c);
            }else{
                printf("%g+%gi",a*c-b*d,a*d+b*c);
            }
        }
    }
    if(cc==/){
        double shi=(a*c+b*d)/(c*c+d*d);
        double xu=(b*c-a*d)/(c*c+d*d);
        if(c==0&&d==0){
            printf("error\n");
        }else{
            if(xu>0){
                printf("%g+%gi",shi,xu);
            }
            if(xu==0){
                printf("%g",shi);
            }else{
                printf("%g%gi",shi,xu);
            }
        }
    }
    //fclose(stdin);
    //fclose(stdout);
    return 0;
}
// 3 3 * 3 3

 

算法提高 6-17复数四则运算