本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照“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 main(void)
{
struct num{
int a;
int b;
};
struct num n[2],sum;
int i,f;
for(i=0;i<2;i++){
scanf("%d",&n[i].a);
getchar();
scanf("%d",&n[i].b);
}
if(n[1].b%n[0].b==0||n[0].b%n[1].b==0){
if(n[1].b%n[0].b==0){
sum.b=n[1].b;
sum.a=n[1].a+n[0].a*(n[1].b/n[0].b);
}
else{
sum.b=n[0].b;
sum.a=n[0].a+n[1].a*(n[0].b/n[1].b);
}
}
else{
sum.b=n[0].b*n[1].b;
sum.a=n[0].a*n[1].b+n[1].a*n[0].b;
}
f=(sum.a>sum.b)?sum.b:sum.a;
while(sum.a%2==0&&sum.b%2==0){
sum.a/=2;
sum.b/=2;
}
for(i=f;i>1;i/=2){
if(sum.a%i==0&&sum.b%i==0){
sum.a/=i;
sum.b/=i;break;
}
}
if(sum.b==1) printf("%d\n",sum.a);
else printf("%d/%d\n",sum.a,sum.b);
return 0;
}