C语言每日一题-PTA-基础编程题-7-33 有理数加法

7-33 有理数加法 (15分)
本题要求编写程序,计算两个有理数的和。

输入格式:
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。

输出格式:
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2

int main() {
int a1=0,b1=0,a2=0,b2=0;
int sum_a=0,sum_b=0;
scanf("%d/%d %d/%d",&a1,&b1,&a2,&b2);
//先把分子分母乘一个数,使得分母相同,再把分子相加,再对之后的分母分子进行约分 
//先求两个分母:b1 b2的最小公倍数:最小公倍数=两数的乘积/最大公约(因)数 
//1、求b1 b2的最大公约数 
int a=b1,b=b2;
while(b!=0)
{
	int yushu=a%b;
	a=b;
	b=yushu;	
}
//2、求 b1 b2的最小公倍数 
int min_gongbeishu=b1*b2/a;
//3、将a1/b1、a2/b2变成分母相同的有理数 
int change1=0,change2=0;
change1=min_gongbeishu/b1;
a1=a1*change1;
change2=min_gongbeishu/b2;
a2=a2*change2;
b1=min_gongbeishu;
b2=min_gongbeishu;
//4、将分子相加再约分 
sum_a=a1+a2;
sum_b=min_gongbeishu;
a=sum_a;
b=sum_b;
while(b!=0)
{
	int yushu=a%b;
	a=b;
	b=yushu;	
}
sum_a=sum_a/a;
sum_b=sum_b/a;
if(sum_b!=1)
printf("%d/%d",sum_a,sum_b);
else//分母为1 
printf("%d",sum_a);

    return 0;

}

你可能感兴趣的:(C语言学习-基础编程题,c语言)