版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nightmare_ak/article/details/84616234
按题意模拟即可
#include<cstdio>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
void sim(ll up,ll down)
{
int f=0;
if(up<0) f=!f,up=-up;
if(down<0) f=!f,down=-down;
ll d=gcd(up,down);
up/=d,down/=d;
ll leave=up/down;
up-=leave*down;
if(f)
{
printf("(-");
if(leave) printf("%lld",leave);
if(up)
{
if(leave) printf(" ");
printf("%lld/%lld",up,down);
}
printf(")");
}
else
{
if(leave)
{
printf("%lld",leave);
if(up) printf(" %lld/%lld",up,down);
}
else
{
if(!up) printf("0");
else printf("%lld/%lld",up,down);
}
}
}
ll down[2],up[2];
int main()
{
scanf("%lld/%lld%lld/%lld",&up[0],&down[0],&up[1],&down[1]);
ll d=gcd(down[0],down[1]);
ll sum=down[0]/d*down[1];
sim(up[0],down[0]);printf(" + ");sim(up[1],down[1]);printf(" = ");
sim(sum/down[0]*up[0]+sum/down[1]*up[1],sum);puts("");
sim(up[0],down[0]);printf(" - ");sim(up[1],down[1]);printf(" = ");
sim(sum/down[0]*up[0]-sum/down[1]*up[1],sum);puts("");
sim(up[0],down[0]);printf(" * ");sim(up[1],down[1]);printf(" = ");
sim(up[0]*up[1],down[0]*down[1]);puts("");
sim(up[0],down[0]);printf(" / ");sim(up[1],down[1]);printf(" = ");
if(up[1]*down[0]==0) printf("Inf\n");
else sim(up[0]*down[1],up[1]*down[0]),puts("");
return 0;
}