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:
输入样例2:
输出样例2:
输入样例3:
输出样例3:
博主这里使用的是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; }
|
欢迎小伙伴们提供更简单的解题方法