#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef struct Fraction
{
ll up;
ll down;
}F;
int gcd(ll a,ll b)
{
if (abs(a)<abs(b))
swap(a,b);
if(b==0) return a;
else return gcd(b,a%b);
}
F getDnum(F a)
{
if(a.up==0) a.down = 1;
else{
ll temp = gcd(a.up,a.down);
a.up/=temp;
a.down/=temp;
if(a.down < 0)
{
a.up = -1 * a.up;
a.down = -1 * a.down;
}
}
return a;
}
F printfir(F a)
{
a= getDnum(a);
}
F addF(F D1,F D2)
{
F D;
D.up = D1.up * D2.down + D1.down * D2.up;
D.down = D1.down * D2.down;
getDnum(D);
return D;
}
F mulF(F D1,F D2)
{
F D;
D.up = D1.up * D2.up;
D.down = D1.down * D2.down;
getDnum(D);
return D;
}
F divF(F D1,F D2)
{
F D;
D.up = D1.up * D2.down;
D.down = D1.down * D2.up;
getDnum(D);
return D;
}
F subF(F D1,F D2)
{
F D;
D.up = D1.up * D2.down - D1.down * D2.up;
D.down = D1.down * D2.down;
getDnum(D);
return D;
}
F printFrac(F a)
{
a=getDnum(a);
if(a.down == 1)
{
if(a.up >= 0)
printf("%lld",a.up);
else
printf("(%lld)",a.up);
}
else if(abs(a.up)>a.down)
{
if(a.up >= 0)
printf("%lld %lld/%lld",a.up/a.down,abs(a.up)%a.down,a.down);
else
printf("(%lld %lld/%lld)",a.up/a.down,abs(a.up)%a.down,a.down);
}
else
{
if(a.up >= 0)
printf("%lld/%lld",a.up,a.down);
else
printf("(%lld/%lld)",a.up,a.down);
}
}
const int N = 110;
int main()
{
int n = 2;
F ans;
ans.up = 0;
ans.down = 1;
F D[N];
// scanf("%d",&n);
for(int i = 1;i<=n;i++)
{
scanf("%lld/%lld",&D[i].up,&D[i].down);
D[i]=getDnum(D[i]);
// printf("%d ",D[i].up);
}
//加法
for(int i = 1;i<=n;i++)
{
ans = addF(ans,D[i]);
}
printFrac(D[1]);
printf(" + ");
printFrac(D[2]);
printf(" = ");
printFrac(ans);
printf("\n");
ans.up = 0;
ans.down = 1;
//减法
ans = subF(D[1],D[2]);
printFrac(D[1]);
printf(" - ");
printFrac(D[2]);
printf(" = ");
printFrac(ans);
ans.up = 1;
ans.down = 1;
printf("\n");
//乘法
for(int i = 1;i<=n;i++)
{
ans = mulF(ans,D[i]);
}
printFrac(D[1]);
printf(" * ");
printFrac(D[2]);
printf(" = ");
printFrac(ans);
ans.up = 1;
ans.down = 1;
printf("\n");
//除法
ans = divF(D[1],D[2]);
printFrac(D[1]);
printf(" / ");
printFrac(D[2]);
printf(" = ");
if(D[2].up == 0)
printf("Inf");
else
printFrac(ans);
}
5.3 1088 Rational Arithmetic (20 分)
最新推荐文章于 2021-12-24 20:21:13 发布