Advertisement
wojiaocbj

Untitled

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