#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
long long gcd(long long a,long long b)
{
return !b?a:gcd(b,a%b);
}
long long lcm(long long a,long long b)
{
return a*b/gcd(a,b);
}
void simplify(long long fenzi,long long fenmu)
{
if(fenzi==0)
cout<<0;
else if(abs(fenzi)>=abs(fenmu))
{
int flag=0;
if((fenzi<0&&fenmu>0)||(fenzi>0&&fenmu<0))
{
flag=1;
cout<<"(-";
}
if(fenzi<0) fenzi=-fenzi;
if(fenmu<0) fenmu=-fenmu;
cout<<fenzi/fenmu;
if(fenzi%fenmu!=0)
{
cout<<' ';
long long tempfenzi,tempfenmu;
tempfenzi=fenzi%fenmu;
tempfenmu=fenmu;
cout<<abs(tempfenzi/gcd(tempfenzi,tempfenmu))<<'/'<<abs(tempfenmu/gcd(tempfenzi,tempfenmu));
}
if(flag==1)
cout<<')';
}
else
{
int flag=0;
if((fenzi<0&&fenmu>0)||(fenzi>0&&fenmu<0))
{
flag=1;
cout<<"(-";
}
if(fenzi<0) fenzi=-fenzi;
if(fenmu<0) fenmu=-fenmu;
cout<<fenzi/gcd(fenzi,fenmu)<<'/'<<fenmu/gcd(fenzi,fenmu);
if(flag==1)
cout<<')';
}
}
int main()
{
long long fenzi1,fenmu1,fenzi2,fenmu2;
scanf("%lld/%lld %lld/%lld",&fenzi1,&fenmu1,&fenzi2,&fenmu2);
long long tempfenzi,tempfenmu;
tempfenmu=lcm(fenmu1,fenmu2);
simplify(fenzi1,fenmu1);cout<<" + ";simplify(fenzi2,fenmu2);cout<<" = ";
tempfenzi=fenzi1*tempfenmu/fenmu1+fenzi2*tempfenmu/fenmu2;
simplify(tempfenzi,tempfenmu);cout<<endl;
simplify(fenzi1,fenmu1);cout<<" - ";simplify(fenzi2,fenmu2);cout<<" = ";
tempfenzi=fenzi1*tempfenmu/fenmu1-fenzi2*tempfenmu/fenmu2;
simplify(tempfenzi,tempfenmu);cout<<endl;
simplify(fenzi1,fenmu1);cout<<" * ";simplify(fenzi2,fenmu2);cout<<" = ";
tempfenzi=fenzi1*fenzi2;
tempfenmu=fenmu1*fenmu2;
simplify(tempfenzi,tempfenmu);cout<<endl;
simplify(fenzi1,fenmu1);cout<<" / ";simplify(fenzi2,fenmu2);cout<<" = ";
tempfenzi=fenzi1*fenmu2;
tempfenmu=fenmu1*fenzi2;
if(fenzi2==0)
cout<<"Inf";
else
{
simplify(tempfenzi,tempfenmu);
}
return 0;
}
这题只有20分。。。写半个小时。。。
只要注意判断整体正负时不能用a*b<0 因为范围可能超过long long int