题目描述
本题要求编写程序,计算2个有理数的和、差、积、商。
输入描述:
输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分
母不为0。
输出描述:
分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的
最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目保证正确的输出中
没有超过整型范围的整数。
输入例子:
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
#include<iostream>
using namespace std;
//求最大公约数
int max_gongyue(int a1,int b1)
{
if(a1<0)a1=-a1;
if(b1<0)b1=-b1;
int i,j;
if(b1<a1)i=b1;
else i=a1;
for(j = i;j>=2;j--)
{
if((a1%j==0)&&(b1%j==0))
break;
}
if(j<2) return 0;
else return j;
}
//求最小公倍数
int min_gongbei(int b1,int b2)
{
int i;
if(b1<b2)i=b1;
else i=b2;
for(;i<=b1*b2;i++)
{
if((i%b1==0)&&(i%b2==0))break;
}
return i;
}
//进行分数的化简并输出
void huajian(int a1,int b1)
{
int gongyue;
gongyue = max_gongyue(a1,b1);
if(gongyue!=0)
{
a1 = a1/gongyue;
b1 = b1/gongyue;
}
if(a1 == 0)cout<<0;
else
{
if(((a1<0 )&& (-a1>b1))|| (a1>b1) )
{
if(a1%b1==0)
{
if(a1<0)cout<<"("<<a1/b1<<")";
else cout<<a1/b1;
}
else
{
if(a1<0)cout<<"("<<a1/b1<<" "<<-a1%b1<<"/"<<b1<<")";
else cout<<a1/b1<<" "<<a1%b1<<"/"<<b1;
}
}
else if(a1==b1)
{
if(a1<0)cout<<"("<<a1/b1<<")";
else cout<<a1/b1;
}
else
{
if(a1<0) cout<<"("<<a1<<"/"<<b1<<")";
else cout<<a1<<"/"<<b1;
}
}
}
int main ()
{
int a1,b1, a2,b2,gongyue,gongbei;
int c1,c2;
char c;
cin>>a1>>c>>b1;
cin>>a2>>c>>b2;
gongbei = min_gongbei(b1,b2);
c1 = gongbei/b1*a1 + gongbei/b2*a2;
c2 = gongbei;
huajian(a1,b1);
cout<<" + ";
huajian(a2,b2);
cout<<" = ";
huajian(c1,c2);
cout<<endl;
gongbei = min_gongbei(b1,b2);
c1 = gongbei/b1*a1 - gongbei/b2*a2;
c2 = gongbei;
huajian(a1,b1);
cout<<" - ";
huajian(a2,b2);
cout<<" = ";
huajian(c1,c2);
cout<<endl;
c1=a1*a2;
c2=b1*b2;
huajian(a1,b1);
cout<<" * ";
huajian(a2,b2);
cout<<" = ";
huajian(c1,c2);
cout<<endl;
if(a2 == 0)
{
huajian(a1,b1);
cout<<" / ";
huajian(a2,b2);
cout<<" = ";
//huajian(c1,c2);
cout<<"Inf";
cout<<endl;
}
else
{
if(a1<0)c1=-a1*b2;
else c1=a1*b2;
if(a2<0)c2=-b1*a2;
else c2=b1*a2;
if(a1*a2<0)c1=-c1;
huajian(a1,b1);
cout<<" / ";
huajian(a2,b2);
cout<<" = ";
huajian(c1,c2);
cout<<endl;
}
return 0;
}