Advertisement
wojiaocbj

complex

Mar 26th, 2023
601
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.76 KB | None | 0 0
  1. /*
  2.  Author: 曹北健(37509)
  3.  Result: AC Submission_id: 5279941
  4.  Created at: Sun Mar 26 2023 10:10:23 GMT+0800 (China Standard Time)
  5.  Problem: 6714  Time: 4 Memory: 2096
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <math.h>
  11. #include <ctype.h>
  12. #include <string.h>
  13. #include <time.h>
  14. #pragma warning(disable:4996)
  15. int equal_f64(double x, double y){
  16.     return fabs(x - y) < 1e-8;
  17. }
  18. int isint(double x){
  19.     return (fabs(round(x) - x)) < 1e-8;
  20. }
  21. int main(){
  22.     double a1, b1, a2, b2, e1, e2;
  23.     char input[256] = { 0 },op;
  24.     while(fgets(input, 255, stdin)){
  25.         sscanf(input, "(%lf%lfi)%c(%lf%lfi)", &a1, &b1, &op, &a2, &b2);
  26.         switch(op){
  27.         case '+':
  28.             e1 = a1 + a2;
  29.             e2 = b1 + b2;
  30.             break;
  31.         case '-':
  32.             e1 = a1 - a2;
  33.             e2 = b1 - b2;
  34.             break;
  35.         case '*':
  36.             e1 = a1 * a2 - b1 * b2;
  37.             e2 = a1 * b2 + a2 * b1;
  38.             break;
  39.         case '/':
  40.             e1 = (a1 * a2 + b1 * b2) / (a2 * a2 + b2 * b2);
  41.             e2 = (b1 * a2 - a1 * b2) / (a2 * a2 + b2 * b2);
  42.         default:
  43.             break;
  44.         }
  45.         if(equal_f64(e1, 0.) && equal_f64(e2, 0.)){
  46.             puts("0");
  47.         }
  48.         else if(equal_f64(e1, 0.)){//imag
  49.             if(equal_f64(e2, 1.)){
  50.                 puts("i");
  51.             }
  52.             else if(equal_f64(e2, -1.)){
  53.                 puts("-i");
  54.             }
  55.             else if(isint(e2)){
  56.                 printf("%.0fi\n", e2);
  57.             }
  58.             else{
  59.                 printf("%.2fi\n", e2);
  60.             }
  61.         }
  62.         else if(equal_f64(e2,0.)){//nonzero real
  63.             if(isint(e1)){
  64.                 printf("%.0f\n", e1);
  65.             }
  66.             else{
  67.                 printf("%.2f\n", e1);
  68.             }
  69.         }
  70.         else{//complex
  71.             if(isint(e1)){
  72.                 printf("%.0f", e1);
  73.             }
  74.             else{
  75.                 printf("%.2f", e1);
  76.             }
  77.             if(equal_f64(e2, 1.)){
  78.                 puts("+i");
  79.             }
  80.             else if(equal_f64(e2, -1.)){
  81.                 puts("-i");
  82.             }
  83.             else if(isint(e2)){
  84.                 printf("%+.0fi\n", e2);
  85.             }
  86.             else{
  87.                 printf("%+.2fi\n", e2);
  88.             }
  89.         }
  90.     }
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement