当前位置: 首页 > news >正文

PAT 1081 Rational Sum

在这里插入图片描述
在这里插入图片描述
这一题是模拟分数相加的过程,涉及到通分和约分,大意是给出N个分数,计算它们相加后的结果,要求最终化为最简。
通分和约分涉及到了最小公倍数和最大公因数,其他过程模拟即可。
这里复习一下最大公因数和最小公倍数的求法:

long long gcd(long long x,long long y)
{if(y==0){return x;}else{return gcd(y,x%y);}
}
long long lcm(long long x,long long y)
{return x/gcd(x,y)*y;
}

完整的代码如下:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <unordered_map>
#include <limits.h>
#include <queue>
using namespace std;
int N; 
long long a[105];
long long b[105];
long long gcd(long long x,long long y)
{if(y==0){return x;}else{return gcd(y,x%y);}
}
long long lcm(long long x,long long y)
{return x/gcd(x,y)*y;
}
int main()
{//ios::sync_with_stdio(0),cin.tie(0),cout.tie(cin>>N;long long x;for(int i=0;i<N;i++){cin>>a[i];scanf("/");cin>>b[i];if(i==0){continue;}if(i==1){x=lcm(b[i-1],b[i]);}else{x=lcm(x,b[i]);}}if(N==1){if(a[0]==0){cout<<"0";return 0;}long long temp=gcd(a[0],b[0]);long long p=a[0]/abs(temp);long long q=b[0]/abs(temp);//	cout<<p<<" "<<q<<endl;if(p>0){//说明是正数if(p<q){cout<<p<<"/"<<q<<endl;	}	else if(p==q){cout<<"1"<<endl;}else{cout<<p/q<<" ";if(p/q*q<p)cout<<p-p/q*q<<"/"<<q;}} else if(p==0){cout<<"0"<<endl;}else{if(abs(p)>q){cout<<p/q<<" ";if(p/q*q>p)cout<<p-p/q*q<<"/"<<q;	   }else if(abs(p)==q){cout<<"-1"<<endl;	} else{cout<<p<<"/"<<q<<endl;}}return 0;}//算出来的是最小公倍数long long sum=0;for(int i=0;i<N;i++){if(b[i]!=x){a[i]=a[i]*(x/b[i]);}sum+=a[i];} if(sum==0){cout<<"0";return 0;}//	cout<<sum<<" "<<x<<endl;//sum是一个数//x是一个数//如果sum>x//那么 
//	 cout<<sum<<"/"<<x<<endl;long long temp=gcd(sum,x);long long p=sum/abs(temp);long long q=x/abs(temp);//cout<<p<<" "<<q<<endl;if(p>q){if(p%q==0){cout<<p/q;return 0;}cout<<p/q<<" ";if(p/q*q<p)cout<<p-p/q*q<<"/"<<q;	} else if(p==q){cout<<"1";	}else if(p<0){if(abs(p)>q){cout<<p/q<<" ";if(p/q*q>p)cout<<p-p/q*q<<"/"<<q;}else if(abs(p)==q){cout<<p;}else{cout<<p<<"/"<<q;}}else{cout<<p<<"/"<<q;}return 0;} 

总结:写的代码比较烂但还是把所有的情况考虑全面了,注意通分约分,注意只有一个数的情况。改了两三次可算是AC了。

http://www.dtcms.com/a/348597.html

相关文章:

  • 【机器学习】8 Logistic regression
  • Power BI切片器自定义顺序
  • 智能油脂润滑系统:给设备一份 “私人定制” 的保养方案
  • Linux 学习笔记 - 集群管理篇
  • 【大模型LLM学习】Data Agent学习笔记
  • C++算法学习专题:二分查找
  • Kubernetes部署Prometheus+Grafana 监控系统NFS存储方案
  • Socket some functions
  • 让机器人“想象”未来?VLN导航迎来“理解力”新升级
  • 每日算法刷题Day64:8.24:leetcode 堆6道题,用时2h30min
  • 解密 Spring Boot 自动配置:原理、流程与核心组件协同
  • 人形机器人——电子皮肤技术路线:压电式电子皮肤及一种超越现有电子皮肤NeuroDerm的设计
  • 深度学习:CUDA、PyTorch下载安装
  • Leetcode 3659. Partition Array Into K-Distinct Groups
  • sqlite创建数据库,创建表,插入数据,查询数据的C++ demo
  • 商密保护迷思:经营秘密到底需不需要鉴定?
  • 对称二叉树
  • 机械学习综合练习项目
  • jar包项目自启动设置ubuntu
  • [论文阅读] 软件工程 | GPS算法:用“路径摘要”当向导,软件模型检测从此告别“瞎找bug”
  • 服务器硬件电路设计之 SPI 问答(四):3 线 SPI、Dual SPI 与 Qual SPI 的奥秘
  • 春秋云镜 Hospital
  • Vue 3多语言应用开发实战:vue-i18n深度解析与最佳实践
  • 线程包括哪些状态?线程状态之间是如何变化的?
  • yggjs_rlayout框架v0.1.2使用教程 02 TechLayout 布局组件
  • 拿AI下围棋 -- 开源项目leela-zero
  • ​Mac用户安装JDK 22完整流程(Intel版dmg文件安装指南附安装包下载)​
  • mysql历史社区版本下载
  • 面试题及解答:掌握Linux下常用性能分析工具
  • (Redis)过期删除策略