1088. Rational Arithmetic (20) PAT
阿新 • • 發佈:2018-11-20
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; long long gcd(long long a,long long b){ if(a<0){ a=-a; } if(b<0){ b=-b; } long long t; if(a<b){ t=a; a=b; b=t; } long long n; while(b){ n=a%b; a=b; b=n; } return a; } void print1(long long num,long long deno){ long long flag=gcd(deno,num); int temp=0; num=num/flag;deno=deno/flag; if((num*deno)<0){ cout<<'('; temp=1; } if(deno<0){ num=-num; deno=-deno; } long long num1=abs(num); if(num==0){ cout<<0; } else if(deno==1){ cout<<num; } else if(num1<deno){ cout<<num<<'/'<<deno; } else{ long long k=num/deno; num=num1%deno; cout<<k<<' '<<num<<'/'<<deno; } if(temp){ cout<<')'; } return ; } void Sum(long long a,long long b,long long c,long long d){ long long deno,num,flag; deno=b*d; num=a*d+c*b; print1(a,b); cout<<' '<<'+'<<' '; print1(c,d); cout<<' '<<'='<<' '; print1(num,deno); cout<<endl; return ; } void Dif(long long a,long long b,long long c,long long d){ long long deno,num,flag; deno=b*d; num=a*d-c*b; // flag=gcd(deno,num); // num=num/flag;deno=deno/flag; print1(a,b); cout<<' '<<'-'<<' '; print1(c,d); cout<<' '<<'='<<' '; print1(num,deno); cout<<endl; return ; } void Pro(long long a,long long b,long long c,long long d){ long long deno,num,flag; deno=b*d; num=a*c; // flag=gcd(deno,num); // num=num/flag;deno=deno/flag; print1(a,b); cout<<' '<<'*'<<' '; print1(c,d); cout<<' '<<'='<<' '; print1(num,deno); cout<<endl; return ; } void Quo(long long a,long long b,long long c,long long d){ if(c==0){ print1(a,b); cout<<' '<<'/'<<' '; print1(c,d); cout<<' '<<'='<<' '; printf("Inf"); return ; } long long deno,num,flag; deno=b*c; num=a*d; // flag=gcd(deno,num); // num=num/flag;deno=deno/flag; print1(a,b); cout<<' '<<'/'<<' '; print1(c,d); cout<<' '<<'='<<' '; print1(num,deno); return ; } int main(){ long long a,b,c,d; scanf("%lld/%lld%lld/%lld",&a,&b,&c,&d); // cout<<a<<' '<<b<<' '<<c<<' '<<d<<endl; Sum(a,b,c,d); Dif(a,b,c,d); Pro(a,b,c,d); Quo(a,b,c,d); return 0; }