1209:分数求和

简介: 1209:分数求和

1209:分数求和

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数

1;若最终结果的分母为1,则直接用整数表示。

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

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

【输入】

第一行是一个整数n,表示分数个数,1≤n≤10;

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

【输出】

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

【输入样例】

2

1/2

1/3

【输出样例】

5/6

【来源】

No

1. //本题有坑 测试p和q会超过10
2. #include<cstdio>
3. #include<iostream> 
4. #include<cstring>
5. #include<cstdlib>
6. using namespace std;
7. int gcb(int x,int y)
8. {
9.  return y? gcb(y,x%y):x;
10. }
11. void get_value(char *s,int &a,int &b)
12. {
13.   int k=0;
14.   while(s[k++]!='/');
15.   s[k-1]='\0';
16.   a=atoi(s);
17.   b=atoi(s+k);
18. }
19. int main()
20. {
21.   char s[100];
22.   int a,b;
23.   int n,x=0,y=1,m,len;
24.   scanf("%d",&n);
25.   for(int i=1;i<=n;i++){
26.     scanf("%s",s); 
27.     get_value(s,a,b);
28.     x=x*b+a*y;
29.     y=y*b;
30.     m=gcb(x,y);
31.     x/=m;
32.     y/=m;
33.   }
34.   printf("%d/%d",x,y);  
35.   return 0;
36.  }
1. #include<cstdio>
2. #include<iostream> 
3. #include<cstring>
4. #include<cstdlib>
5. using namespace std;
6. int n,p[10001],q[10001],gbs=1,totfz;
7. int gcb(int a,int b)//求最大公约数 
8. {
9.  if(a%b==0) return b;
10.   return gcb(b,a%b);
11. }
12. int lcm(int a,int b)//求最小公倍数
13. {
14.   return a*b/gcb(a,b); 
15. }
16. int main()
17. {
18.   scanf("%d",&n);
19.   for(int i=1;i<=n;i++){
20.     scanf("%d/%d",&p[i],&q[i]);
21.     gbs=lcm(gbs,q[i]); 
22.   }
23.   for(int i=1;i<=n;i++)
24.     totfz+=p[i]*(gbs/q[i]); 
25.   int ansgcd=gcb(max(totfz,gbs),min(totfz,gbs));
26.   totfz/=ansgcd;gbs/=ansgcd;
27.   printf("%d",totfz);
28.   if(gbs!=1) printf("/%d",gbs); 
29.   return 0;
30.  }

 


相关文章
|
2月前
PTA-求分数序列的前n项和分数 20
求分数序列的前n项和分数 20
21 0
|
并行计算 算法 搜索推荐
Speccpu2017分数的一点介绍
对Spec2017的speed和rate分数做点介绍
3517 0
|
1天前
分数1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 求和
分数1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 求和
5 0
|
8月前
wustojc3010快速求和
wustojc3010快速求和
34 0
|
11月前
|
机器学习/深度学习 Windows
1228 序列求和 (伯努利数)
1228 序列求和 (伯努利数)
64 0
|
11月前
辗转相除法(既约分数)
辗转相除法(既约分数)
|
数据挖掘 BI 定位技术
为什么中位数(大多数时候)比平均值好
为什么中位数(大多数时候)比平均值好
182 1
为什么中位数(大多数时候)比平均值好
L1-009 N个数求和 (20 分)
L1-009 N个数求和 (20 分)
95 0
|
算法 Python
7-2 多项式求和 (10 分)
7-2 多项式求和 (10 分)
127 0
【C#】根据分数求出相应的成绩等级
【C#】根据分数求出相应的成绩等级
253 0