#include <cstdio>
#include <cmath>
typedef long long int ll;
using namespace std;
void simple(ll x,ll y);
ll gcd(ll x,ll y);
int main()
{
ll a1,a2,b1,b2;
scanf("%lld/%lld %lld/%lld",&a1,&b1,&a2,&b2);
simple(a1,b1); printf(" + ");
simple(a2,b2); printf(" = ");
simple(a1*b2+a2*b1,b1*b2); printf("\n");// +
simple(a1,b1); printf(" - ");
simple(a2,b2); printf(" = ");
simple(a1*b2-a2*b1,b1*b2); printf("\n");// -
simple(a1,b1); printf(" * ");
simple(a2,b2); printf(" = ");
simple(a1*a2,b1*b2); printf("\n");// *
simple(a1,b1); printf(" / ");
simple(a2,b2); printf(" = ");
if(a2*b1==0) printf("Inf");
else simple(a1*b2,b1*a2);// /
return 0;
}
void simple(ll x,ll y)
{
if(x==0) printf("0");
else
{
int mm=1;//要负数处理
//判断符号
if((x>0&&y>0)||(x<0&&y<0)) mm=0;
x=abs(x);y=abs(y);
ll k=x/y,hh;
x%=y;
hh=gcd(x,y);
x/=hh;y/=hh;
//print
if(mm)
{
if(x==0) printf("(-%lld)",k);
else
if(k==0) printf("(-%lld/%lld)",x,y);
else printf("(-%lld %lld/%lld)",k,x,y);
}
else
{
if(x==0) printf("%lld",k);
else
if(k==0) printf("%lld/%lld",x,y);
else printf("%lld %lld/%lld",k,x,y);
}
}
}
ll gcd(ll x,ll y)//辗转相除法
{
int z=x%y;
if(!(x%y)) return y;
else return gcd(y,z);
}
pta 乙1034有理数加减//简单模拟 但需要注意 one需要开long long 因为题目只说输出不超范围不代表过程不超范围 two学会辗转相除法不然超时把
最新推荐文章于 2023-11-26 12:42:49 发布