L1-009 N个数求和

Posted 乐逍遥xwl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L1-009 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


思路:直接用两个数组分别存分子和分母后通分相加再化简,考虑到通分时数据可能会爆int,所以用long long,写的略微有点复杂......


 1 #include<stdio.h>
 2 #include<math.h>
 3  long long int find( long long int a,long long int b);//找两个数的最大公约数(最后化简用) 
 4  long long int find1(long long int a, long long int b);//找两个数的最小公倍数 
 5  long long int find2(long long int num[],long long int n);//找一个数组内所有数的最小公倍数
 6 int main()
 7 {
 8      long long int n,s,s1;//s表示约分整数部分 ,s1表示分式的分子分母的最大公约数 
 9     scanf("%lld",&n);
10      long long int sumbei,sum1=0,sum2;//sum1表示分子 ,sum2表示整数部分外的分式部分的分子 
11      long long int num1[n],num2[n];//num1存分子,num2存分母
12     char e=/;
13     for(long long int i=0;i<n;i++)
14     {
15         scanf("%lld%c%lld",&num1[i],&e,&num2[i]);
16      } 
17      sumbei=find2(num2,n);//找所有分母的最小公倍数
18       for(long long int i=0;i<n;i++)
19       {
20           sum1=sum1+num1[i]*(sumbei/num2[i]);//通分求分子和(分母为sumbei) 
21       }
22       if(sum1%sumbei==0)
23       printf("%lld",sum1/sumbei);
24       else if(sum1/sumbei>0)
25       {
26           s=sum1/sumbei;
27           sum2=sum1-s*sumbei;
28           s1=find(sum2,sumbei);
29         printf("%lld %lld%c%lld",s,sum2/s1,e,sumbei/s1);
30       }
31       else if(sum1/sumbei<=0)
32       {
33            s1=find(sum1,sumbei);
34            printf("%lld%c%lld",sum1/s1,e,sumbei/s1);
35       }
36     // printf("%d%c%d",sum1,e,sumbei);
37 /*     for(int i=0;i<n;i++)
38      printf("%d %d\n",num1[i],num2[i]);*/
39     return 0;
40 }
41 long long int find(long long int a,long long int b)
42 {
43      long long int c,yue;
44     c=a%b;
45     while(c!=0)
46     {
47         a=b;
48         b=c;
49         c=a%b;
50     }
51     yue=b;
52     return yue;
53  } 
54 long long int find1(long long int a,long long int b)
55 {
56     long long int c,sum,bei;
57     sum=a*b;
58     c=a%b;
59     while(c!=0)
60     {
61         a=b;
62         b=c;
63         c=a%b;
64     }
65     bei=sum/b;
66     return bei;
67 }
68 long long int find2( long long int num[],long long int n)
69 {
70     long long int flag=num[0];
71     for(long long int i=1;i<n;i++)
72     {
73         flag=find1(flag,num[i]);
74     }
75     return flag;
76 }

 

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

L1-009. N个数求和

L1-009 N个数求和

L1-009. N个数求和

L1-009 N个数求和

题解PTA团体程序设计天梯赛L1-009 N个数求和 (20 分) Go语言|Golang

天梯赛每日打卡02(7-12题解)