1034. 有理数四则运算(20)

来源:互联网 发布:阿里云企业邮箱设置 编辑:程序博客网 时间:2024/05/20 16:35
#include<stdio.h>    long gg(long x, long y)  {      x<0?x=-x:x=x;      y<0?y=-y:y=y;      long m=x%y;      while(m)      {          x=y;          y=m;          m=x%y;      }      return y;  }    void printk(long a, long b)  {      bool flag=false;      long gf=gg(a,b);        if(a==0)      {          printf("0");return;      }      if(a<0)      {          printf("(-");          a=(-1)*a;          flag=true;      }      if(a==b)          printf("1");      else if(a>b)      {          a=a/gf;          b=b/gf;          if(a%b!=0)              printf("%ld %ld/%ld",a/b,a%b,b);          else              printf("%ld",a/b);      }      else      {          a=a/gf;          b=b/gf;          printf("%ld/%ld",a,b);      }      if(flag)          printf(")");  }    int main(void)  {      long a1=0,b1=0,a2=0,b2=0;        scanf("%ld/%ld %ld/%ld",&a1,&b1,&a2,&b2);  //¼Ó      long n=0,d=0;      n=a1*b2+a2*b1;      d=b1*b2;      printk(a1,b1);      printf(" + ");      printk(a2,b2);      printf(" = ");      printk(n,d);      printf("\n");        n=a1*b2-a2*b1;      d=b1*b2;      printk(a1,b1);      printf(" - ");      printk(a2,b2);      printf(" = ");      printk(n,d);      printf("\n");        n=a1*a2;      d=b1*b2;      printk(a1,b1);      printf(" * ");      printk(a2,b2);      printf(" = ");      printk(n,d);      printf("\n");        n=a1*b2;      d=b1*a2;      printk(a1,b1);      printf(" / ");      printk(a2,b2);      printf(" = ");      if(d==0)          printf("Inf\n");      else      {          if(d<0)          {              n=-n;              d=-d;          }          printk(n,d);          printf("\n");      }        return 0;  }

0 0