#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;
}
1088. Rational Arithmetic (20)
最新推荐文章于 2020-07-17 09:57:49 发布