3488:分数求和—通分(普及组T1)

本文介绍了一种通过编程实现多个分数相加并将其结果转换为最简形式的方法。该方法利用了最大公约数的概念来确保分数处于最简状态。文章提供了一个完整的C++代码示例,演示了如何输入分数、计算总和并将结果简化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

小明有 n 个分数并想对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为 1;若最终结果的分母为 1,则直接用整数表示。

如:5/6、10/3 均是最简形式,而 3/6 需要化简为 1/2, 3/1 需要化简为 3。

分子和分母均不为 0,也不为负数。

输入

第一行是一个整数 n,表示分数个数,1 \le n \le 101⩽n⩽10;

接下来 n 行,每行一个分数,用 p/q的形式表示,不含空格,p,q 均不超过 10。

输出

输出只有一行,即最终结果的最简形式。若为分数,用p/q的形式表示。

输入样例 

2
1/2
1/3

输出样例

5/6

这题主要考察最大公约数和最小公倍数的用法,注意可能要开long long

#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
	if(b==0){
        return a;
    }else{
        return gcd(b,a%b);
    }
}
int main() {
	int n,fz=0,fm=1;
    cin>>n;
    int p,q,i;
    char c;
    for(i=1;i<=n;i++){
        cin>>p>>c>>q;
        fz=fz*q+p*fm;
        fm=fm*q;
        int t=gcd(fz,fm);
        fz=fz/t;
        fm=fm/t;
    }
	if(fm==1){
		cout<<fz;
    }else{
		cout<<fz<<"/"<<fm;
    }
	return 0;
}

测试结果为AC,不喜勿喷。

禁止随意搬运

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值