#include<iostream>
#include<algorithm>
using namespace std;
struct fraction{
long long up,down;
};
void show(fraction ans)
{
int flag=0;
if(ans.up==0) printf("0");
else{
if(ans.up<0){
printf("(");
flag=1;
}
if(ans.down==1) printf("%lld",ans.up);
else if(abs(ans.up)>abs(ans.down))
printf("%lld %lld/%lld",ans.up/ans.down,abs(ans.up)%abs(ans.down),ans.down);
else
printf("%lld/%lld",ans.up,ans.down);
if(flag==1) printf(")");
}
}
long long gcd(long long a,long long b)
{
if(b==0) return a;
else return gcd(b,a%b);
}
fraction reduction(fraction ans)
{
if(ans.down<0){
ans.up=-ans.up;
ans.down=-ans.down;
}
if(ans.up==0) ans.down=1;
else{
int d=gcd(abs(ans.up),abs(ans.down));
ans.up/=d;
ans.down/=d;
}
return ans;
}
fraction sum(fraction a,fraction b)
{
fraction ans;
ans.up=a.up*b.down+b.up*a.down;
ans.down=a.down*b.down;
ans=reduction(ans);
show(a);
printf(" + ");
show(b);
printf(" = ");
show(ans);
printf("\n");
}
fraction difference(fraction a,fraction b)
{
fraction ans;
ans.up=a.up*b.down-b.up*a.down;
ans.down=a.down*b.down;
ans=reduction(ans);
show(a);
printf(" - ");
show(b);
printf(" = ");
show(ans);
printf("\n");
}
fraction product(fraction a,fraction b)
{
fraction ans;
ans.up=a.up*b.up;
ans.down=a.down*b.down;
ans=reduction(ans);
show(a);
printf(" * ");
show(b);
printf(" = ");
show(ans);
printf("\n");
}
fraction quotient(fraction a,fraction b)
{
fraction ans;
ans.up=a.up*b.down;
ans.down=a.down*b.up;
ans=reduction(ans);
show(a);
printf(" / ");
show(b);
printf(" = ");
if(b.up==0) printf("Inf");
else show(ans);
printf("\n");
}
int main()
{
fraction a,b;
scanf("%lld/%lld",&a.up,&a.down);
scanf("%lld/%lld",&b.up,&b.down);
a=reduction(a);
b=reduction(b);
sum(a,b);
difference(a,b);
product(a,b);
quotient(a,b);
return 0;
}
PAT A 1088 Rational Arithmetic
最新推荐文章于 2022-09-03 15:21:30 发布