结构-02. 有理数加法(15)

本题要求编写程序,计算两个有理数的和。

输入格式:

输入在一行中按照“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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值