PAT L1-009. N个数求和 模拟
2016-07-14 15:41
465 查看
题目链接:https://www.patest.cn/contests/gplt/L1-009
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; #define INF 0x3f3f3f3f typedef long long ll; typedef struct node { ll a,b; }fraction; ll gcd(ll a,ll b) { if(b==0) return a; else return gcd(b,a%b); } ll lcm(ll a,ll b) { ll tmp=gcd(a,b); return a*(b/tmp); } int main() { int n; while(cin>>n){ fraction sum; int flag1=0; //结果是否有整数部分 int flag2=0; //结果是否为负数 scanf("%lld/%lld",&sum.a,&sum.b); for(int i=0;i<n-1;i++){ ll a,b; scanf("%lld/%lld",&a,&b); ll fm=lcm(sum.b,b); ll fz=sum.a*(fm/sum.b)+a*(fm/b); sum.a=fz; sum.b=fm; } ll fz=sum.a,fm=sum.b; if(!fz) //结果为0的情况 printf("0"); if(fz/fm){ printf("%lld",fz/fm); flag1=1; } if(fz<0){ flag2=1; fz=-fz; } if(fz%fm){ fz=fz%fm; ll tmp=gcd(fz,fm); if(flag1) printf(" "); if(!flag1&&flag2) printf("-");//没有整数部分但分数部分为负的情况 printf("%lld/%lld",fz/tmp,fm/tmp); } printf("\n"); } return 0; }
相关文章推荐
- 使用Java代码进行因数分解和求最小公倍数的示例
- Java中使用辗转相除法求最大公约数
- 使用Python求解最大公约数的实现方法
- Python实现求最大公约数及判断素数的方法
- 计算两个数的最大公约数 gcd(a,b)
- 求最大公约数
- 数论算法初步理解(1)
- Java学习历程(关于最大公约数和最小公倍数)
- 杭电2028
- hdu 2028 Lowest Common Multiple Plus
- 最大公约数与最小公倍数的计算
- 输入两个数,算他们的最小公倍数和最大公约数
- 欧几里德算法(辗转相除法):求两个整数最大公约数
- “铺地砖”问题
- 最大公约数问题
- 求最大公约数 C++
- 算法概论的第一次作业:最大公约数
- c练习03
- 最大公约数、欧几里得算法与求解模线性方程
- JavaScript求多个数的最小公倍数