题目描述
本题要求编写程序,计算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
本题要求编写程序,计算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
算法代码:
<span style="font-size:14px;">#include<iostream>
#include<math.h>
using namespace std;
//结果输出,k为整数部分,a、b是分子分母
void output(int k,int a,int b){
if(k<0){
if(a==0)
cout<<'('<<k<<')';
else
cout<<'('<<k<<" "<<a<<'/'<<b<<')';
}
else if(k==0){
if(a<0)
cout<<'('<<a<<'/'<<b<<')';
else if(a>0)
cout<<a<<'/'<<b;
else
cout<<a;
}
else{
if(a!=0)
cout<<k<<" "<<a<<'/'<<b;
else
cout<<k;
}
}
//化简函数,用于计算相应的k,a,b
void simplify(int *a,int *b,int *k){
//不断除以他们的公因数
for(int i=2;i<=abs(*a)&&i<=abs(*b);i++){
while(*a%i==0&&*b%i==0){
*a/=i;
*b/=i;
}
}
*k=*a/(*b);
if(*k!=0)
*a=abs(*a)-(*b)*abs(*k);
}
int main(){
int a1,b1,a2,b2;
int a3,b3,a4,b4,a5,b5,a6,b6;
int k1,k2,k3,k4,k5,k6;
char ch;
cin>>a1>>ch>>b1>>a2>>ch>>b2;
//加法处理
a3=a1*b2+a2*b1;
b3=b1*b2;
simplify(&a3,&b3,&k3);
//减法处理
a4=a1*b2-a2*b1;
b4=b1*b2;
simplify(&a4,&b4,&k4);
//乘法处理
a5=a1*a2;
b5=b1*b2;
simplify(&a5,&b5,&k5);
//除法处理(即乘以除数的倒数)
a6=a1*b2;
b6=b1*a2;
//除数小于 0,将除数的负号放在被除数上,方便处理
if(b6<0){
b6=-b6;
a6=-a6;
}
if(b6!=0)
simplify(&a6,&b6,&k6);
//输出加法
simplify(&a1,&b1,&k1);
simplify(&a2,&b2,&k2);
output(k1,a1,b1);
cout<<" + ";
output(k2,a2,b2);
cout<<" = ";
output(k3,a3,b3);
cout<<endl;
//输出减法
output(k1,a1,b1);
cout<<" - ";
output(k2,a2,b2);
cout<<" = ";
output(k4,a4,b4);
cout<<endl;
//输出乘法
output(k1,a1,b1);
cout<<" * ";
output(k2,a2,b2);
cout<<" = ";
output(k5,a5,b5);
cout<<endl;
//输出除法
output(k1,a1,b1);
cout<<" / ";
output(k2,a2,b2);
cout<<" = ";
if(b6!=0)
output(k6,a6,b6);
else
cout<<"Inf";
cout<<endl;
return 0;
}</span>