蓝桥杯2024年第十五届省赛真题-R 格式(高精度乘法 + 加法)

news/2024/5/1 19:46:44

本题链接:蓝桥杯2024年第十五届省赛真题-R 格式 - C语言网

题目:​​​​​​​

样例:

输入
2 3.14
输出
13

思路:

        根据题意,结合数据范围,这是一道模板的高精度乘以低精度问题。

        题意是double 类型 d 与 2 的n 次幂相乘,最后四舍五入。

        我们换一下视角,看作 对于double 类型 d ,与 n 个 2 相乘,最后四舍五入。

        这样就很快解出答案了,就是对于double小数部分需要微调一下即可。

高精度乘法模板函数如下:

        

// 高精度乘以低精度 模板
inline string mul(string A,int x)
{vector<int>a;	// 取出每一位int len = A.size();	// 倒着取每一位,方便低位到高位的计算for(int i = len - 1;~i;--i) a.emplace_back(A[i] - '0');vector<int>tem;	// 存储计算结果int t = 0;	// 存储临时进位数for(int i = 0;i < len;++i){int num = t + a[i] * x;	// 开始每一位相乘tem.emplace_back(num % 10);	// 取计算结果个位t = num / 10;	// 计算进位}if(t) tem.emplace_back(t);	// 如果最后有高位的进位,我们进位string ans = "";	// 存储最后计算结果// 将结果转回为 string ,并返回结果int temlen = tem.size();for(int i = temlen - 1;~i;--i)	ans += char(tem[i] + '0');return ans;
}

  高精度加法模板函数如下:

// 高精度加法模板
inline string ADD(string A,string B)
{vector<int>a,b;int alen = A.size();int blen = B.size();// 倒着取每一位,方便低位到高位的计算for(int i = alen - 1;~i;--i) a.emplace_back(A[i] - '0');for(int i = blen - 1;~i;--i) b.emplace_back(B[i] - '0');vector<int>tem;	// 存储计算结果int t = 0;	// 存储临时进位数for(int i = 0;i < alen or i < blen;++i){int num = t;	// 开始每一位相加if(i < alen) num += a[i];if(i < blen) num += b[i];tem.emplace_back(num % 10);// 取计算结果个位t = num / 10;// 计算进位}if(t) tem.emplace_back(t);	// 如果最后有高位的进位,我们进位string ans = "";	// 存储最后计算结果// 将结果转回为 string ,并返回结果int temlen = tem.size();for(int i = temlen - 1;~i;--i)	ans += char(tem[i] + '0');return ans;
}

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define int long long
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define All(x) x.begin(),x.end()
#pragma GCC optimize(3,"Ofast","inline")
#define IOS std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;
inline void solve();signed main()
{
//	freopen("a.txt", "r", stdin);
//	IOS;int _t = 1;
//	cin >> _t;while (_t--){solve();}return 0;
}// 高精度乘以低精度 模板
inline string mul(string A,int x)
{vector<int>a;	// 取出每一位int len = A.size();	// 倒着取每一位,方便低位到高位的计算for(int i = len - 1;~i;--i) a.emplace_back(A[i] - '0');vector<int>tem;	// 存储计算结果int t = 0;	// 存储临时进位数for(int i = 0;i < len;++i){int num = t + a[i] * x;	// 开始每一位相乘tem.emplace_back(num % 10);	// 取计算结果个位t = num / 10;	// 计算进位}if(t) tem.emplace_back(t);	// 如果最后有高位的进位,我们进位string ans = "";	// 存储最后计算结果// 将结果转回为 string ,并返回结果int temlen = tem.size();for(int i = temlen - 1;~i;--i)	ans += char(tem[i] + '0');return ans;
}// 高精度加法模板
inline string ADD(string A,string B)
{vector<int>a,b;int alen = A.size();int blen = B.size();// 倒着取每一位,方便低位到高位的计算for(int i = alen - 1;~i;--i) a.emplace_back(A[i] - '0');for(int i = blen - 1;~i;--i) b.emplace_back(B[i] - '0');vector<int>tem;	// 存储计算结果int t = 0;	// 存储临时进位数for(int i = 0;i < alen or i < blen;++i){int num = t;	// 开始每一位相加if(i < alen) num += a[i];if(i < blen) num += b[i];tem.emplace_back(num % 10);// 取计算结果个位t = num / 10;// 计算进位}if(t) tem.emplace_back(t);	// 如果最后有高位的进位,我们进位string ans = "";	// 存储最后计算结果// 将结果转回为 string ,并返回结果int temlen = tem.size();for(int i = temlen - 1;~i;--i)	ans += char(tem[i] + '0');return ans;
}inline void solve()
{int n;string d;bool vis = false;	// 检查是否符合四舍五入cin >> n >> d;// 如果 d 是整数的情况if(d.find(".") == -1){while(n--){d = mul(d,2);}}else{int pos = d.find(".");	// 找到 小数点 . 的位置下标int len = d.size() - pos - 1;	// 计算小数部分长度d.erase(d.begin() + pos);	// 删掉 小数点 .// 将 d 所有的数字当作整数相乘计算while(n--){d = mul(d,2);}pos = d.size() - len;	// 更新小数点位置// 查看小数点后一位是否符合四舍五入if((d[pos] - '0') >= 5) vis = true;// 删掉小数部分,保留整数while(len--) d.erase(d.begin() + d.size() - 1);if(vis) d = ADD(d,"1");	// 如果符合四舍五入,那么进一}cout << d << endl;	
}

最后提交:


http://www.mrgr.cn/p/40625866

相关文章

Spring框架第一篇(Spring概述与IOC思想)

文章目录 一、Spring概述二、Spring家族三、Spring Framework四、IOC思想五、IOC容器在Spring中的实现 一、Spring概述 Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。…

eclipse .project

.project <?xml version"1.0" encoding"UTF-8"?> <projectDescription> <name>scrm-web</name> <comment></comment> <projects> </projects> <buildSpec> <buil…

电商技术揭秘九:搜索引擎中的SEO数据分析与效果评估

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台的个性…

PostgreSQL源码学习 win10源码编译安装

源码学习的第一步是源码安装,只有用源码安装才能之后在此基础上阅读、调试、开发系统。 我这里安装的是PostgreSQL 13.2版本,其他版本大同小异,如有出入,以最新版本的文档为准:PostgreSQL最新版文档 一、下载源码 源码下载链接,内含各自版本的源码:PG源码 比如13.2版本的…

JVM结构化体系

目录 目录 1.JVM 简介 1.1. 如何理解 JVM 呢&#xff1f; 1.2. 市场主流 JVM 分析&#xff1f; 1.3. 为什么要学习 JVM&#xff1f; 1.4. 字节码底层是如何执行呢&#xff1f; 如何理解 JIT 呢&#xff1f; 为什么 JVM 中解释执行与编译执行的并存&#xff08;混合模式&…

多 线 程

1&#xff0e;什么是多线程? 有了多线程&#xff0c;我们就可以让程序同时做多件事情 2.多线程的作用? 提高效率 3&#xff0e;多线程的应用场景? 只要你想让多个事情同时运行就需要用到多线程 比如:软件中的耗时操作、所有的聊天软件、所有的服务器 1.进程和线程【理解】 …

Minecraft中ScoreBoard的底层实现与扩展应用

ScoreBoard计分板专题本文章着重整理了Bukkit插件开发中计分板的底层实现与工作原理,是作者个人经验积累,之后会慢慢补充。 一、Bukkit对计分板的底层实现 1、概述: (1)管理计分板 Bukkit中提供了一个用于管理计分板的类,总之要对计分板进行操作就要先获取这个类。 Scorebo…

[leetcode] max-area-of-island

. - 力扣&#xff08;LeetCode&#xff09; 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&…

小程序解析二维码:jsQR

1.了解jsQR jsQR是一个纯javascript脚本实现的二维码识别库&#xff0c;不仅可以在浏览器端使用&#xff0c;而且支持后端node.js环境。jsQR使用较为简单&#xff0c;有着不错的识别率。 2.效果图 3.二维码 4.下载jsqr包 npm i -d jsqr5.代码 <!-- index.wxml --> &l…

【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 拷贝构造函数 概念 拷贝构造函数的特性及用法 赋值运算符重载 运算符重载 赋值运算符重载 结语 前言 本篇主要内容&#xff1a;类的6个默认成员函数中的拷贝构造函数…

WPF中DataGrid主从数据(父子数据)展示

在wpf中可以使用DataGrid控件,进行主从数据展示,也称父子数据展示。下面展示纯原生控件编码实现功能(样式自己可以根据需求进行修改)。 效果如下: 点击图标,展开和收缩可以自由的切换,也可以自己重新写一个样式,比如+,-或者类似图标的样式,都是可以的。 1.首先创建一…

java(网络编程)

什么是网络编程? 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输 Java中可以使用ja…

Linux中磁盘的分区,格式化,挂载和文件系统的修复

一.分区工具 1.分区工具介绍 fdisk 2t及以下分区 推荐 (分完区不保存不生效&#xff0c;有反悔的可能) gdisk 全支持 推荐 parted 全支持 不推荐 ( 即时生效&#xff0c;分完立即生效) 2.fdisk 分区,查看磁盘 格式:fdisk -l [磁盘设备] fdisk -l 查看…

C++11(下篇)

文章目录 C111. 模版的可变参数1.1 模版参数包的使用 2. lambda表达式2.1 Lambda表达式语法捕获列表说明 2.2 lambda的底层 3. 包装器3.1 function包装器3.2 bind 4. 线程库4.1 thread类4.2 mutex类4.3 atomic类4.4 condition_variable类 C11 1. 模版的可变参数 C11支持模版的…

steam怎么退款?steam退款教程?简单几步即可轻松实现退款

steam怎么退款&#xff1f;steam退款教程&#xff1f;简单几步即可轻松实现退款 说到steam平台大家肯定不会陌生&#xff0c;随着现代的发展&#xff0c;在steam上进行购买游戏已经成了很普遍的东西&#xff0c;但是许多玩家在购买游戏试完之后发现游戏并不符合自己的胃口&…

【k8s】:深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)

【k8s】&#xff1a;深入理解 Kubernetes 中的污点&#xff08;Taints&#xff09;与容忍度&#xff08;Tolerations&#xff09; 1、污点&#xff08;Taints&#xff09;2、容忍度&#xff08;Tolerations&#xff09;3、示例演示-测试污点的具体应用场景3.1 给节点打污点&…

微服务之Consul 注册中心介绍以及搭建

一、微服务概述 1.1单体架构 单体架构&#xff08;monolithic structure&#xff09;&#xff1a;顾名思义&#xff0c;整个项目中所有功能模块都在一个工程中开发&#xff1b;项目部署时需要对所有模块一起编译、打包&#xff1b;项目的架构设计、开发模式都非常简单。 当项…

SSL证书添加与ICP备案,对于SpringBoot的要求

配置了SSL证书之后&#xff0c;在SpringBoot的resources文件夹里的application.properties会添加以下代码&#xff1a; server.port443 不需要添加server.address。不然会报错。 https类型的请求默认在Postman里面不可请求。 经过SSL证书处理的网页&#xff0c;链接中使默认…

Python单元测试pytest捕获日志输出

使用pytest进行单元测试时&#xff0c;遇到了需要测试日志输出的情况&#xff0c;查看了文档 https://docs.pytest.org/en/latest/how-to/capture-stdout-stderr.html https://docs.pytest.org/en/latest/how-to/logging.html 然后试了一下&#xff0c;捕捉logger.info可以用…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU使用containerd部署K8S 1.26.15集群(一主多从)》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大概时间有10s多,这个时间太长了,尝试了各种办法,都解决不了,后面尝试安装了了1.26.…