12:分数求和
2017-03-06 19:49
351 查看
12:分数求和
查看提交
统计
提问
总时间限制: 1000ms 内存限制: 65536kB描述
输入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
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; long long int a[1000001]; long long int b[1000001]; long long int anszi=1; long long int ansmu=1; long long int gcd(long long int a,long long int b) { if(a==0)return b; else return gcd(b%a,a); } int main() { long long int n; cin>>n; for(int i=1;i<=n;i++) { scanf("%d/%d",&a[i],&b[i]); } if(n==1) { long long int gys=gcd(a[1],b[1]); a[1]=a[1]/gys; b[1]=b[1]/gys; if(b[1]==1) { cout<<a[1]; return 0; } cout<<a[1]<<"/"<<b[1]; return 0; } for(int i=1;i<=n-1;i++) { ansmu=b[i+1]*b[i]; anszi=a[i]*(ansmu/b[i])+a[i+1]*(ansmu/b[i+1]); b[i+1]=ansmu; a[i+1]=anszi; } long long int zi=anszi; long long int mu=ansmu; long long int gys=gcd(zi,mu); anszi=anszi/gys; ansmu=ansmu/gys; if(ansmu==1)cout<<anszi; else { cout<<anszi<<"/"<<ansmu; } return 0; }
这个题的测试数据比较坑爹
1.要考虑的分母为0的情况
2.要考虑的n为1的情况
3.所有数据全开long long否则最后一个点不过
相关文章推荐
- Openjudge NOI题库1.13编程基础之综合应用12:分数求和
- 4817:【一维数组】元素求和 分数: 1
- 天梯赛模拟题_(N个分数的求和)
- Linux下的C语言基础编程——“分数求和”
- OJ.2480: 分数求和
- noi题库(noi.openjudge.cn) 1.13编程基础之综合应用 T12 分数求和
- C++ 第十周上机任务-分数求和2
- 1098 简单分数数列求和
- 分数求和问题
- 分数序列求和
- 分数的加减法——C语言初学者代码中的常见错误与瑕疵(12)
- Microsoft100——12.求和
- 分数求和
- 文件名称: 项目利用循环求和 、分数的累加、乘法表
- 有序分数求和
- 分数求和
- 分数求和
- scala编程系列(12)-实现分数相加的类(上)
- c++第十周上机任务-分数求和1
- 第八周 OJ 分数序列求和