当前位置: 首页 > 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.xdnf.cn/news/1356859.html

相关文章:

  • 不只是关键词匹配:AI如何像人类一样‘听懂‘你在说什么
  • Spring Boot 中 @Controller与 @RestController的区别及 404 错误解析
  • 工作记录 2015-08-31
  • 【科研绘图系列】R语言浮游植物初级生产力与光照强度的关系
  • leetcode_189 轮转数组
  • 【LLIE专题】一种用于低光图像增强的空间自适应光照引导 Transformer(SAIGFormer)框架
  • Ansible 自动化基石:变量定义、优先级控制与 Vault 敏感信息加密实战指南
  • 【重学MySQL】八十七. 触发器管理全攻略:SHOW TRIGGERS与DROP TRIGGER实战详解
  • MySQL管理
  • [身份验证脚手架] 认证路由 | 认证后端控制器与请求
  • MR椎间盘和腰椎分割项目:基于深度学习的医学图像分析
  • 【数据结构】栈和队列——栈
  • MyBatis 和 MyBatis-Plus对比
  • 一个奇怪的问题-Python会替代Java吗?技术语言之争的真相-优雅草卓伊凡
  • 深度学习:CUDA、PyTorch下载安装
  • 用 Bright Data MCP Server 构建实时数据驱动的 AI 情报系统:从市场调研到技术追踪的自动化实战
  • 自由学习记录(87)
  • System.IO.Pipelines 与“零拷贝”:在 .NET 打造高吞吐二进制 RPC
  • 关于 svn无法查看下拉日志提示“要离线”和根目录看日志“no data” 的解决方法
  • 编译Marlin 1.1.9.1固件指南
  • 如何理解“向量”
  • 大数据、hadoop、爬虫、spark项目开发设计之基于数据挖掘的交通流量分析研究
  • 数据挖掘 4.1~4.7 机器学习性能评估参数
  • 【软考架构】云计算相关概念
  • 《CF1120D Power Tree》
  • Implementing Redis in C++ : E(AVL树详解)
  • 深入解析Apache Kafka的核心概念:构建高吞吐分布式流处理平台
  • 自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信
  • Linux-函数的使用-编写监控脚本
  • Qt——网络通信(UDP/TCP/HTTP)