PAT-2014.有理数四则运算(20)

30 篇文章 0 订阅
29 篇文章 0 订阅
#include<iostream>
using namespace std;
void gys(long long &a, long long &b);
void Cout(long long k1,long long a1,long long b1,char s,long long k2,long long a2,long long b2,long long k,long long a,long long b);
void Cout(long long k1,long long a1,long long b1,char s,long long k2,long long a2,long long b2);
char c;
int main()
{
long long a1,a2,a, k1,k2,k,b1,b2,b;
char s;
cin>>a1>>c>>b1;
cin>>a2>>c>>b2;


gys(a1,b1);
gys(a2,b2);
    
k1=a1/b1;
a1=a1-k1*b1;
k2=a2/b2;
a2=a2-k2*b2;


s='+';
a=(a1+k1*b1)*b2+(a2+k2*b2)*b1;
b=b1*b2;
k=a/b;
a=a-k*b;
gys(a,b);
//da yin
   Cout(k1,a1,b1,s,k2,a2,b2,k,a,b);
   cout<<endl;


s='-';
a=(a1+k1*b1)*b2-(a2+k2*b2)*b1;
b=b1*b2;
k=a/b;
a=a-k*b;
gys(a,b);
//da yin
Cout(k1,a1,b1,s,k2,a2,b2,k,a,b);
cout<<endl;


s='*';
a=(a1+k1*b1)*(a2+k2*b2);
b=b1*b2;
k=a/b;
a=a-k*b;
gys(a,b);
//da yin
Cout(k1,a1,b1,s,k2,a2,b2,k,a,b);
cout<<endl;


s='/';
if(a2!=0||k2!=0)
{
a=(a1+k1*b1)*b2;
b=b1*(a2+k2*b2);
if(b<0)
{
b=-b;
a=-a;
}
k=a/b;
a=a-k*b;
gys(a,b);
//da yin
Cout(k1,a1,b1,s,k2,a2,b2,k,a,b);
}
else
    Cout(k1,a1,b1,s,k2,a2,b2);
return 0;
}


void gys(long long &a, long long &b)
{
long long i,j;
if(a<0)
j=-a;
else
j=a;
for(i=2;i<=j;i++)
{
if(a%i==0&&b%i==0)
{a=a/i;b=b/i;}
}
}


void Cout(long long k1,long long a1,long long b1,char s,long long k2,long long a2,long long b2,long long k,long long a,long long b)
{
if(k1)
if(k1>0)
cout<<k1<<" ";
else if(a1!=0)
cout<<"(-"<<-k1<<" ";
   else
cout<<"(-"<<-k1<<") ";
if(a1!=0)
{
if(a1<0)
{
if(k1<0)
cout<<-a1;
else 
cout<<"(-"<<-a1;
}
else if(k1==0)
cout<<a1;
else 
cout<<a1;
cout<<c;
if(k1<0||a1<0)
cout<<b1<<") ";
else
cout<<b1<<" ";
}
else if(k1==0)
cout<<0<<" ";


cout<<s<<" ";//
if(k2)
if(k2>0)
cout<<k2<<" ";
else if(a2!=0&&k2!=0)
cout<<"(-"<<-k2<<" ";
else if(k2!=0)
cout<<"(-"<<-k2<<") ";
if(a2!=0)
{
if(a2<0)
{ if(k2<0)
cout<<-a2;
else
cout<<"(-"<<-a2;}
else
cout<<a2;
cout<<c;
if(k2<0||a2<0)
cout<<b2<<") ";
else
cout<<b2<<" ";
}
else if(k2==0)
cout<<0<<" ";


cout<<"= ";
if(k)
if(k>0&&a==0)
cout<<k;
   else if(k>0&&a!=0)
cout<<k<<" ";
else if(a!=0)
cout<<"(-"<<-k<<" ";
else
cout<<"(-"<<-k<<")";
if(a!=0)
{
if(a<0)
{ if(k<0)
cout<<-a;
else
cout<<"(-"<<-a;}
else
cout<<a;
cout<<c;
if(k<0||a<0)
cout<<b<<")";
else
cout<<b;
}
else if(k==0)
cout<<0;
}


void Cout(long long k1,long long a1,long long b1,char s,long long k2,long long a2,long long b2)
{
if(k1)
if(k1>0)
cout<<k1<<" ";
else if(a1!=0)
cout<<"(-"<<-k1<<" ";
else
cout<<"(-"<<-k1<<") ";
if(a1!=0)
{
if(a1<0)
{
if(k1<0)
cout<<-a1;
else
cout<<"(-"<<-a1;
}
else
cout<<a1;
cout<<c;
if(k1<0||a1<0)
cout<<b1<<") ";
else
cout<<b1<<" ";
}
else if(k1==0)
cout<<0<<" ";
cout<<s<<" ";//
if(k2)
if(k2>0)
cout<<k2<<" ";
else if(a2!=0)
cout<<"(-"<<-k2<<" ";
else
cout<<"(-"<<-k2<<") ";
if(a2!=0)
{
if(a2<0)
{ if(k2<0)
cout<<-a2;
else
cout<<"(-"<<-a2;}
else
cout<<a2;
cout<<c;
if(k2<0||a2<0)
cout<<b2<<") ";
else
cout<<b2<<" ";
}
else if(k2==0)
cout<<0<<" ";//


cout<<"= ";
    cout<<"Inf";

}


/**********************************************************/

注意每则运算结果输出后面不能带空格,除法输出之后不能有回车。 区分有理数的代数k,分母a两者为零和不为零时的输出格式,有理数为负数或正数时的输出格式。

例:

5/3 0/6

1 2/3 + 0 = 1 2/3

1 2/3 - 0 = 1 2/3

1 2/3 * 0 = 0

1 2/3 / 0 = Inf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值