1088. Rational Arithmetic (20)

来源:互联网 发布:云计算工程师好干吗 编辑:程序博客网 时间:2024/06/15 20:21
#include<cstdio>#include<algorithm>using namespace std;struct Fraction{  long long up,down;};long long gcd(long long a,long long b){  if(b == 0) return a;  else return gcd(b,a%b);}Fraction reduction(Fraction f1){  if(f1.down<0)  {    f1.up = -f1.up;    f1.down = -f1.down;  }  if(f1.up == 0)    f1.down = 1;  else  {    int x = gcd(abs(f1.up) ,abs(f1.down));    f1.up = f1.up / x;    f1.down = f1.down / x;  }  return f1;}//输出结果,如果是整数输出整数类型//如果是假分数,输出整数和分数部分,否则直接输出,符号在整数前面void show_re(Fraction f1){  if(f1.up<0)    printf("(");  f1 = reduction(f1);  if(f1.down == 1)  {    printf("%lld",f1.up);  }  else if(abs(f1.up) > f1.down)  {    printf("%lld %lld/%lld",f1.up / f1.down,abs(f1.up) % f1.down, f1.down);  }  else  {    printf("%lld/%lld",f1.up,f1.down);  }  if(f1.up<0)    printf(")");}Fraction add(Fraction f1,Fraction f2){  Fraction re;  re.up = f1.up * f2.down + f2.up * f1.down;  re.down = f1.down * f2.down;  return reduction(re);}Fraction minu(Fraction f1,Fraction f2){  Fraction re;  re.up = f1.up * f2.down - f2.up * f1.down;  re.down = f1.down * f2.down;  return reduction(re);}Fraction multi(Fraction f1,Fraction f2){  Fraction re;  re.up = f1.up * f2.up;  re.down = f1.down * f2.down;  return reduction(re);}Fraction divide(Fraction f1,Fraction f2){  Fraction re;  re.up = f1.up * f2.down;  re.down = f1.down * f2.up;  return reduction(re);}using namespace std;int main(){  int N;  Fraction f1,f2,sum;  scanf("%lld/%lld %lld/%lld",&f1.up,&f1.down,&f2.up,&f2.down);  show_re(f1);  printf(" + ");  show_re(f2);  printf(" = ");  sum = add(f1,f2);  show_re(sum);  printf("\n");  show_re(f1);  printf(" - ");  show_re(f2);  printf(" = ");  sum = minu(f1,f2);  show_re(sum);  printf("\n");  show_re(f1);  printf(" * ");  show_re(f2);  printf(" = ");  sum = multi(f1,f2);  show_re(sum);  printf("\n");  show_re(f1);  printf(" / ");  show_re(f2);  printf(" = ");  if(f2.up != 0)  {    sum = divide(f1,f2);    show_re(sum);  }  else  {    printf("Inf");  }  printf("\n");  return 0;}

0 0
原创粉丝点击