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

本题链接:蓝桥杯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.hqwc.cn/news/624029.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

大数据快速搭建环境 CDH QuickStart VM虚拟机版本安装

虚拟机镜像安装 下载 https://downloads.cloudera.com/demo_vm/vmware/cloudera-quickstart-vm-5.8.0-0-vmware.zip https://downloads.cloudera.com/demo_vm/vmware/cloudera-quickstart-vm-5.12.0-0-vmware.zip https://downloads.cloudera.com/demo_vm/vmware/cloudera-…

记录一下我hive连不上DataGrip的问题

用户名和密码都没问题&#xff0c;但报如下这个错误 原因&#xff1a;是因为我在linux上没启hiveserver2服务 解决&#xff1a; [atguiguhadoop102 hadoop]$ hiveserver2 which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8…

代码随想录算法训练营第56天| 583. 两个字符串的删除操作|72. 编辑距离|编辑距离总结篇

代码随想录算法训练营第56天| 583. 两个字符串的删除操作|72. 编辑距离|编辑距离总结篇 详细布置 583. 两个字符串的删除操作 本题和动态规划&#xff1a;115.不同的子序列 相比&#xff0c;其实就是两个字符串都可以删除了&#xff0c;情况虽说复杂一些&#xff0c;但整体思…

深度解析 Spark(进阶):架构、集群运行机理与核心组件详解

关联阅读博客文章&#xff1a;深度解析SPARK的基本概念 引言&#xff1a; Apache Spark作为一种快速、通用、可扩展的大数据处理引擎&#xff0c;在大数据领域中备受关注和应用。本文将深入探讨Spark的集群运行原理、核心组件、工作原理以及分布式计算模型&#xff0c;带领读者…

YOLOv8最新改进系列:融合DySample超轻量动态上采样算子,低延迟、高性能,目前最新上采样方法!!!遥遥领先!

YOLOv8最新改进系列&#xff1a;融合DySample超轻量动态上采样算子&#xff0c;低延迟、高性能&#xff0c;目前最新上采样方法&#xff01;&#xff01;&#xff01;遥遥领先&#xff01; DySample超轻量动态上采样算子全文戳这&#xff01;here! 详细的改进教程以及源码&am…

HarmonyOS开发实例:【分布式邮件】

概述 基于TS扩展的声明式开发范式编程语言编写的一个分布式邮件系统&#xff0c;可以由一台设备拉起另一台设备&#xff0c;每次改动邮件内容&#xff0c;都会同步更新两台设备的信息。效果图如下&#xff1a; 搭建OpenHarmony开发环境 完成本篇Codelab我们首先要完成开发环境…

NL2SQL进阶系列(5):论文解读业界前沿方案(DIN-SQL、C3-SQL、DAIL-SQL、SQL-PaLM)、新一代数据集BIRD-SQL解读

NL2SQL进阶系列(5)&#xff1a;论文解读业界前沿方案&#xff08;DIN-SQL、C3-SQL、DAIL-SQL&#xff09;、新一代数据集BIRD-SQL解读 NL2SQL基础系列(1)&#xff1a;业界顶尖排行榜、权威测评数据集及LLM大模型&#xff08;Spider vs BIRD&#xff09;全面对比优劣分析[Text2…

数据结构学习之路--深入探索栈的核心要点(附C源码)

哈喽~大家&#xff01;今天我们来学习栈的特别节目&#xff0c;精彩马上开始~ 目录 前言 一、栈 1 栈的概念 2 栈的结构 3 栈的实现 3.1 栈的定义 3.2 栈的初始化 3.3 入栈 3.4 出栈 3.5 取栈顶元素 3.6 判断栈是否为空 3.7 栈的大小 3.8 栈的销毁 二、源代…

掀起区块链开发狂潮!Scaffold-eth带你一键打造震撼DApp

文章目录 前言一、Scaffold-eth是什么&#xff1f;二、安装和配置1.准备工作2.安装3.配置开发环境 三、进阶使用1.放入自己的合约2.部署运行 总结 前言 前面的文章传送&#x1f6aa;&#xff1a;hardhat入门 与 hardhat进阶 在之前的文章中&#xff0c;我们已经探讨了使用Har…

输入变量数据通过隶属函数从真实论域转变到模糊论域的示例

1. 示例1 假设我们有一个关于顾客满意度的调查&#xff0c;调查数据是顾客对某项服务的评分&#xff0c;评分范围是1到5分。现在&#xff0c;我们希望对这些评分进行模糊化处理&#xff0c;以便更好地理解和解释顾客的满意度。 首先&#xff0c;我们定义三个模糊集合&#xf…

边缘计算网关主要有哪些功能?-天拓四方

随着物联网&#xff08;IoT&#xff09;的快速发展和普及&#xff0c;边缘计算网关已经成为了数据处理和传输的重要枢纽。作为一种集成数据采集、协议转换、数据处理、数据聚合和远程控制等多种功能的设备&#xff0c;边缘计算网关在降低网络延迟、提高数据处理效率以及减轻云数…