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

PAT-Rational Arithmetic (20)

题目来源

Rational Arithmetic (20)

注意

  • 题目要求负数要用括号框起来
  • 最简分数的正数部分向 0 取整

思路简介

题目比较复杂
首先说一下输出,我采用的是下面的处理:
对于一个有理数我们拿到它的分子g1和分母g2

  1. 过一个转换函数transform,把有理数化简并且转换成三个数值{g,g1,g2}={整数部分,分子,分母}
  2. 每个经过转换的数在输出时,再过一个输出函数print,用于处理除以 0 和加括号的操作

明确这两点后,之后要处理的就只有运算

  1. 加减法让分母通分后分子相加减
  2. 乘法直接分子分母对应乘,除法倒过来乘
    这样运算不会出现除0的问题,后续输出时判断分母是否为 0

运算和后面的转换函数都需要用到gcd求最大公约数,再这里不进行描述
感兴趣可以参考我的另一篇文章手推GCD

遇到的问题

  1. 注意输出括号
  2. 注意如果整数部分为0,还要判断分子是否是负数
  3. 注意最简分数的形式
    • 博主一开始以为最简分数是整数部分向下取整,即 (-1/3=-1 2/3)
    • 超级合理因为这样只有正数部分带符号分数部分无论如何都是正数(bushi)
    • 实际上本题的最简分数是整数部分向0处取整,即(-1/3=0 -1/3)
    • 实际上就是先把所有的数当成正数,化简后再加符号即可

代码

/** * https://www.nowcoder.com/pat/5/problem/4036 * gcd */#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;charop[]={'+','-','*','/'};llgcd(ll a,ll b){returnb==0?a:gcd(b,a%b);}vector<ll>transform(ll g1,ll g2){if(!g1)return{0,0,g2};//值为0if(!g2)return{0,0,0};//分母为0intf=1;//负号标志if(g1<0||g2<0)f=-1;//开始约分g1=abs(g1),g2=abs(g2);ll g=gcd(g1,g2);g1/=g,g2/=g;ll k=g1/g2;g1-=g2*k;//添加符号if(!k)g1*=f;//如果没有整数部分符号要加到分子!return{k*f,g1,g2};}voidprint(vector<ll>g){if(!g[2]){//分母为0cout<<"Inf";return;}if(g[0]<0||g[1]<0)cout<<'(';if(!g[1]){cout<<g[0];}else{if(g[0])cout<<g[0]<<' ';cout<<g[1]<<'/'<<g[2];}if(g[0]<0||g[1]<0)cout<<')';cout<<' ';}voidsolve(){ll a1,a2,b1,b2;charc;cin>>a1>>c>>a2>>b1>>c>>b2;//通分分母准备加减ll g=gcd(a2,b2);ll g2=a2/g*b2;ll g11=a1*(b2/g)+b1*(a2/g),g12=a1*(b2/g)-b1*(a2/g);//乘除ll g23=a2*b2,g13=a1*b1;ll g24=a2*b1,g14=a1*b2;//过转换函数vector<ll>a=transform(a1,a2);vector<ll>b=transform(b1,b2);vector<ll>r[4];r[0]=transform(g11,g2);r[1]=transform(g12,g2);r[2]=transform(g13,g23);r[3]=transform(g14,g24);for(inti=0;i<4;++i){print(a);cout<<op[i]<<' ';print(b);cout<<"= ";print(r[i]);cout<<'\n';}}intmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);//fstream in("in.txt",ios::in);cin.rdbuf(in.rdbuf());intT=1;//cin>>T;while(T--)solve();return0;}
http://www.jsqmd.com/news/466077/

相关文章:

  • SpringBoot 多环境配置报错全集|profile切换失败、配置不生效终极解决
  • 超节点算力革命(七)| 超节点综合评估体系
  • 数挖不是树蛙-数据挖掘-绪论(非科班必备,数据挖掘科班复习必备)
  • 基于 Java + SpringBoot + Vue + MySQL 的北部湾地区助农系统实战指南
  • @Autowired`和 @Resource区别
  • 商汤小浣熊为OpenClaw注入新技能:软硬一体安全部署,养出精通Excel的龙虾!
  • 2026最强小尺寸安卓平板来了?联想拯救者Y700第五代曝光
  • 破解青少年近视困扰,铭远光学益趣控PRO带来高效防控新选择
  • 2026年比较好的油烟机清洗厂家推荐:商用油烟机清洗/工厂油烟机清洗/餐饮店油烟机清洗厂家推荐及选购指南 - 行业平台推荐
  • 02计算机组成原理-存储器技术(上)
  • 探秘温州新石器无人车:未来出行体验,销售中心实地体验分享
  • 富文本编辑器模板1
  • 墨盒买哪家好?格之格提醒你一定要选靠谱大品牌 - yangyuan-shunfeng
  • Spring的Bean是线程安全的吗
  • Spring Bean 生命周期
  • 疑似口服美容假洋牌真相调查:国内最火8个口服美容品牌深度解析 - 资讯焦点
  • 计算机毕业设计源码:基于python与Flask的京东手机数据分析系统 pyecharts requests爬虫 电子产品 电商 商品 推荐系统 数据分析 可视化 大数据 大模型(建议收藏)✅
  • 注塑机数据采集如何实现与 MES 系统的双向数据闭环?
  • IACheck AI报告文档审核为新能源汽车高压安全检测报告审核提供支撑
  • 格之格硒鼓怎么样?品质硬核、选购省心,办公耗材优选之选(1) - yangyuan-shunfeng
  • 2026年硒鼓耐用品牌推荐:格之格为何成为大众的首选品牌?(1) - yangyuan-shunfeng
  • 数组随课笔记
  • Python变量作用域和相关的关键字
  • 买硒鼓买什么牌子好?格之格易加粉2 - yangyuan-shunfeng
  • 2026南通全屋定制小红书运营服务商推荐:抖音视频拍摄/抖音陪跑/新媒体运营/短视频培训/企业IP打造培训课程/选择指南 - 优质品牌商家
  • CSS 盒模型常见面试题及答案
  • Laravel 10.x重磅更新:全新特性解析
  • 课堂随笔小记(企业实训第三天)——2026/3/11
  • unsloth 安装在google colab
  • Spring 核心知识点全解析(IOC+AOP)