L1-009 N个数求和

题:
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式
输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 …给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

这里的输出样例就是告诉我们,有三种输出情况,我们都要考虑进去
输出样例1:有整数也有分数
输出样例2:只有整数
输出样例3:只有分数

输入样例1

1
2
5
2/5 4/15 1/30 -2/60 8/3

输出样例1

1
3 1/3

输入样例2

1
2
2
4/3 2/3

输出样例2

1
2

输入样例3

1
2
3
1/3 -1/6 1/8

输出样例3

1
7/24

博主这里使用的是c语言写的,如果需要python解答的可以私信博主要
题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<stdio.h>
int maxGongYue(long long x,long long y)
{
int temp = (x%y == 0) ? y : maxGongYue(y, x % y); //这里使用三目运算符传出最大公约数
return temp;
}
int main()
{
long long a = 0, b = 0,fenzi=0,fenmu=1,maxgy=0;
int n = 0,i=0;
scanf("%d", &n);
//进行通分化简运算
do
{
scanf("%lld/%lld", &a, &b);
// 这下面三行代码其实就是给俩个分式通分用的
fenzi =fenzi*b;
fenzi = fenzi + a * fenmu;
fenmu =fenmu *b;
maxgy = maxGongYue(fenzi, fenmu);//每一次运算后都进行一次化简,便与运算,控制数据的范围,防止超出数据类型范围
fenzi /= maxgy;
fenmu /= maxgy;
i++;
} while (i < n);
//输出样例2的那种情况
if (fenzi % fenmu == 0)
{
printf("%lld", fenzi / fenmu);
}
//输出样例3的那种情况
else if (fenzi && (fenzi / fenmu == 0))
{
printf("%lld/%lld", fenzi, fenmu);
}
//输出样例1;
else
{
printf("%lld %lld/%lld", fenzi / fenmu, fenzi%fenmu, fenmu);
}
return 0;
}

欢迎小伙伴们提供更简单的解题方法