L1-9 N个数求和

Posted fatcatm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L1-9 N个数求和相关的知识,希望对你有一定的参考价值。

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

输入格式:

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

输出格式:

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

输入样例1:

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

输出样例1:

3 1/3

输入样例2:

2
4/3 2/3

输出样例2:

2

输入样例3:

3
1/3 -1/6 1/8

输出样例3:

7/24

解题思路:这道题重点在于各种特殊情况的判断和处理。

推测:

测试点4为结果或过程中分母出现负数,即在找最大公因数时要取绝对值

测试点5为结果或过程中分母出现0,在此情况下不必判断最大公因数(出现浮点错误)

测试点3为只有一个输入,这种时候不进入循环但要对输入进行约分

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstdlib>
 4 
 5 long long min (long long a, long long b){
 6     if(b > a){
 7         long long t = b;
 8         b = a;
 9         a = t;
10     }
11     while(a % b != 0){
12         long long t = b;
13         b = a - b * (a / b);
14         a = t;
15     }
16     
17     return b;
18 }
19 
20 long long max(long long a, long long b){
21     long long t = min(a, b);
22     return a * b / t;
23 }
24 
25 int main(void){
26     int n;
27     scanf("%d", &n);
28     long long x, y;
29     scanf("%lld/%lld", &x, &y);
30     for(int i = 1; i < n; i++){
31         long long a, b;
32         scanf("%lld/%lld", &a, &b);
33         long long w = max(y, b);
34         x *= (w / y);
35         x += a * (w / b);
36         y = w;
37         if(x == 0){
38             y = 1; continue;
39         }
40         long long m = min(abs(x), y);
41         x /= m; y /= m;    
42     }
43     
44     if(x == 0){
45         printf("0\n");
46     }
47     else{
48         long long m = min(abs(x), y);
49         x /= m; y /= m;    
50         if(x % y == 0) printf("%lld\n", x / y);
51         else if(abs(x) > y){
52             long long in = x / y;
53             x -= in * y;
54             printf("%lld %lld/%lld", in, abs(x), y);//存疑 
55         }
56         else {
57             printf("%lld/%lld\n", x, y);
58         }
59     }
60     
61     return 0;
62 }

 

以上是关于L1-9 N个数求和的主要内容,如果未能解决你的问题,请参考以下文章

ZZNUOJ_C语言1081:n个数求和 (多实例测试)(完整代码)

n个数求和

L1-009. *N个数求和

L1-009. N个数求和

java多个数求和

n个数求和 (下雨堵车没及时发表)