本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2
的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b
的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2
#include <stdio.h>
int gcd(int b, int d){//最小公倍数
if(b%d==0){
return d;
}else{
return gcd(d,b%d);
}
}
int min(int x,int y){
if(x>y){return y;}
return x;
}
int main(){
int a,b,c,d;
scanf("%d/%d %d/%d",&a,&b,&c,&d);//最大公约数
int x;
if(d>b){
x=d*b/gcd(d,b);}//公式
else{
x=b*d/gcd(b,d);
}
int fz=a*x/b+c*x/d;//直接通分的方法也可以;
for(int i=2;i<=min(fz,x);i++){
while(fz%i==0&&x%i==0){//注意while eg.4/4,除2次2;或者用if,最后加上i--;
fz/=i;
x/=i;
}
}
if(x==1){
printf("%d",fz);
}else{
printf("%d/%d",fz,x);
}
return 0;
}