PAT甲题题解-1081. Rational Sum (20)-模拟分数计算
模拟计算一些分数的和,结果以带分数的形式输出
注意一些细节即可
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
/*
模拟计算一些分数的和,结果以带分数的形式输出
注意一些细节即可
*/
const int maxn=;
const int maxv=; //long int范围实际上就是int的范围,sqrt(int)不超过50000
long long numerator[maxn]; //分子
long long denominator[maxn]; //分母
int n;
int maxexp[maxv];
int prime[maxv];
int cnt=;
int isprime[maxv];
/*
素数筛选法,筛选出素数
*/
void init(){
for(int i=;i<maxn;i++)
isprime[i]=;
isprime[]=;
for(int i=;i<maxv;i++){
if(isprime[i]){
prime[cnt++]=i;
for(int j=i*;j<maxv;j+=i)
isprime[j]=;
}
}
}
/*
分解质因数,顺便用来求LCM
*/
void factor(long long val){
for(int i=;i<cnt && val;i++){
int e=;
while(val%prime[i]==){
e++;
val/=prime[i];
}
maxexp[i]=max(maxexp[i],e); //LCM即为各个项的相同质因数取最大次数
}
//如果val本身是素数
if(val>){
prime[cnt]=val;
maxexp[cnt]=max(maxexp[cnt],);
cnt++;
}
}
long long GCD(long long a,long long b){
if(b==)
return a;
return GCD(b,a%b);
}
int main()
{
init();
memset(maxexp,,sizeof(maxexp));
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%lld/%lld",&numerator[i],&denominator[i]);
factor(denominator[i]);
}
long long lcm=;
for(int i=;i<cnt;i++){
for(int j=;j<maxexp[i];j++)
lcm*=prime[i];
}
long long sum=;
for(int i=;i<n;i++){
sum+=numerator[i]*(lcm/denominator[i]);
}
long long integer=sum/lcm;
long long left=sum%lcm;
if(integer!=)
printf("%lld",integer);
if(left!=){
if(integer!=)
printf(" ");
long long gcd=abs(GCD(left,lcm)); //注意这里要加绝对值,因为GDC(-12,9)=-3
printf("%lld/%lld",left/gcd,lcm/gcd);
}
//若结果为0
if(integer== && left==)
printf("0\n");
return ;
}
PAT甲题题解-1081. Rational Sum (20)-模拟分数计算的更多相关文章
- PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算
输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出如果为负数,则带分数两边要有括号如果除数为0,则式子中的结果输出Inf模拟题最好自己动手实现,考验 ...
- PAT甲题题解-1042. Shuffling Machine (20)-模拟
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789205.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1096. Consecutive Factors(20)-(枚举)
题意:一个正整数n可以分解成一系列因子的乘积,其中会存在连续的因子相乘,如630=3*5*6*7,5*6*7即为连续的因子.给定n,让你求最大的连续因子个数,并且输出其中最小的连续序列. 比如一个数可 ...
- PAT甲题题解-1108. Finding Average (20)-字符串处理
求给出数的平均数,当然有些是不符合格式的,要输出该数不是合法的. 这里我写了函数来判断是否符合题目要求的数字,有点麻烦. #include <iostream> #include < ...
- PAT甲题题解-1120. Friend Numbers (20)-水题
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789775.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1041. Be Unique (20)-水题
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789189.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1050. String Subtraction (20)-水题
#include <iostream> #include <cstdio> #include <string.h> #include <algorithm&g ...
- PAT甲题题解-1015. Reversible Primes (20)-素数
先判断n是否为素数然后把n转化成d进制下再反转,转化为十进制的num判断num是否为素数 注意n为0和1时,不是素数!!!注意反转后的num也有可能为1,不是素数!!! #include <io ...
- PAT甲题题解-1046. Shortest Distance (20)-做了一个假的最短路,水
一开始以为是最短路,结果是给你一个环,让你求环上两点之间的距离...那还做毛线 然而还是得做毛线 #include <iostream> #include <cstdio> # ...
随机推荐
- 【2017下集美大学软工1412班_助教博客】团队作业3——需求改进&系统设计团队成绩公示
作业要求 团队作业3--需求改进&系统设计 团队评分结果 Total QH BZ GJ MS SXX WBS SJ JG SJK JH NR CS PHILOSOPHER 需求改进&系 ...
- MySql详解(三)
MySql详解(三) 导入基础表 具体的SQL文件已经放入百度网盘,连接为:http://pan.baidu.com/s/1hseoVR2,后面的MySql内容都是按照这些基础表展开的. depart ...
- sublime text3 当运行报错error时,取消显示路径path的方法
sublime text3 每当运行报错error时,都会出现一长串的path路径,如何不显示呢? 可以通过注释掉Packages/Default/exec.py的四个特定行来更改. 首先,您需要从P ...
- 面向对象的JavaScript --- 动态类型语言
面向对象的JavaScript --- 动态类型语言 动态类型语言与面向接口编程 JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承. Jav ...
- 死磕nginx系列--使用nginx做负载均衡
使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 ...
- BZOJ4919:[Lydsy1706月赛]大根堆(set启发式合并)
Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质: ...
- oracle 更新用户密码,授连接权限,
1.授连接权限 grant connect to 用户名; ALTER USER 用户名 ACCOUNT UNLOCK; 2.更新密码 ALTER USER 用户名 IDENTIFIED BY 更新密 ...
- Dubbo -- 系统学习 笔记 -- 配置
Dubbo -- 系统学习 笔记 -- 目录 配置 Xml配置 属性配置 注解配置 API配置 配置 Xml配置 配置项说明 :详细配置项,请参见:配置参考手册 API使用说明 : 如果不想使用Spr ...
- python+jenkins 构建节点环境编译器配置问题
python 编译器默认添加环境变量路径
- C#委托+回调详解
今天写不完,明天会接着写的,,,, 学习C#有一段时间了,不过C#的委托+回调才这两天才会用,以前只是知道怎么用.前面的一篇文章,函数指针,其实是为这个做铺垫的,说白了委托就相当于C语言中的函数指针, ...