蓝桥杯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.rhkb.cn/news/311485.html

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

相关文章

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

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

由于找不到krpt.dll,无法继续执行代码的5种解决方法

在正常使用电脑的过程中&#xff0c;当尝试启动某个应用程序或者执行特定功能时&#xff0c;系统突然弹出一个错误提示窗口&#xff0c;明确指出由于缺失关键性文件——krpt.dll&#xff0c;导致当前运行的软件无法正常读取并执行相应的程序代码&#xff0c;进而无法顺利完成预…

Neo4j 图形数据库中有哪些构建块?

Neo4j 图形数据库具有以下构建块 - 节点属性关系标签数据浏览器 节点 节点是 Graph 的基本单位。 它包含具有键值对的属性&#xff0c;如下图所示。 NEmployee 节点 在这里&#xff0c;节点 Name "Employee" &#xff0c;它包含一组属性作为键值对。 属性 属性是…

Hit the World Hit世界 Hit2日服官网地址+配置要求+测试时间

Hit the World/Hit世界/Hit2日服官网地址配置要求测试时间 Hit the World/Hit世界是NEXON旗下MMOROG游戏&#xff0c;作品类型上是典型的类天堂游戏&#xff0c;升级思路很简单&#xff0c;一般是跟着主线走&#xff0c;除了主线还有副本升级。支持移动和PC两端&#xff0c;继…

1113. 红与黑--Flood Fill 算法

目录 1113. 红与黑--Flood Fill 算法---宽搜&#xff08;BFS&#xff09;或DFS&#xff09; 输入格式 输出格式 数据范围 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 1.BFS 思路&#xff1a; 2.DFS 思路 方法一&#xff1a;&#xff08;BFS&#x…

STM32H7的8个串口fifo收发(兼容232和485)

STM32H7的8个串口fifo收发&#xff08;兼容232和485&#xff09; 串口硬件串口时序串口高级特性同步和异步的区别单工、半双工、全双工的区别 STM32H78个串口fifo驱动定义数据结构uart_fifo.huart驱动包括中断配置等 应用示例RS485深入理解 仅供学习。 USART 的全称是 Universa…

【电控笔记6.2】拉式转换与转移函数

概要 laplace&#xff1a;单输入单输出&#xff0c;线性系统 laplace 传递函数 总结

sqlilabs靶场1—20题学习笔记(思路+解析+方法)

前几个题目较为简单&#xff0c;均尝试使用各种方法进行SQL注入 第一题 联合查询 1&#xff09;思路&#xff1a; 有回显值 1.判断有无注入点 2.猜解列名数量 3.判断回显点 4.利用注入点进行信息收集 爆用户权限&#xff0c;爆库&#xff0c;爆版本号 爆表&#xff0c;爆列&…

全球顶级的低代码开发平台,你知道几个?

什么是低代码开发平台? 低码开发平台是一个应用程序,提供图形用户界面编程,从而以非常快的速度开发代码,减少了传统的编程工作。 这些工具有助于快速开发代码,最大限度地减少手工编码的努力。这些平台不仅有助于编码,而且还能快速安装和部署。 低码开发工具的好处 低代码平…

3dmax在线渲染怎么取消?怎么关闭云渲染

在线渲染&#xff0c;无论是通过云渲染服务还是渲染农场&#xff0c;已经成为众多3dmax动画制作者的首选方式来执行渲染任务。然而&#xff0c;如果在渲染过程中需要禁用这一在线渲染功能&#xff0c;该怎么操作呢&#xff1f;接下来&#xff0c;让我们一起探讨如何关闭这一功能…

【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图

论文名称&#xff1a;Mapping annual 10-m maize cropland changes in China during 2017–2021 第一作者及通讯作者&#xff1a;Xingang Li, Ying Qu 第一作者单位及通讯作者单位&#xff1a;北京师范大学地理学部 文章发表期刊&#xff1a;《Scientific data》&#xff08…

书生浦语学习第二课 轻松玩转书生浦语趣味Demo

本节课让同学们实践 4 个内容&#xff0c;分别是&#xff1a;部署 InternLM2-Chat-1.8B 模型进行智能对话、部署一期实战营优秀作品 八戒-Chat-1.8B 模型、 运行 Lagent 智能体 Demo、实践部署 浦语灵笔2 模型。 第一步&#xff0c;打开 Intern Studio 界面&#xff0c;点击 创…

【Qt 学习笔记】Qt常用控件 | 按钮类控件Check Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件Check Box的使用及说明 文章编号&#xff1a;…

CSS实现卡片在鼠标悬停时突出效果

在CSS中&#xff0c;实现卡片在鼠标悬停时突出&#xff0c;通常使用:hover伪类选择器。 :hover伪类选择器用于指定当鼠标指针悬停在某个元素上时&#xff0c;该元素的状态变化。通过:hover选择器&#xff0c;你可以定义鼠标悬停在元素上时元素的样式&#xff0c;比如改变颜色、…

基于Docker构建CI/CD工具链(七)使用Jmeter进行自动化压测

上一篇文章中&#xff0c;我们详细介绍了构建 Apifox Cli 的 Docker 镜像的步骤&#xff0c;并通过简单的示例演示了如何利用 GitLab 的 CI/CD 功能&#xff0c;将构建好的镜像利用在自动化测试作业中。在今天的文章中&#xff0c;我们将重点讨论如何构建 JMeter 的 Docker 镜像…

【Entity Framework】你知道如何处理无键实体吗

【Entity Framework】你知道如何处理无键实体吗 文章目录 【Entity Framework】你知道如何处理无键实体吗一、概述二、定义无键实体类型数据注释 三、无键实体类型特征四、无键实体使用场景五、无键实体使用场景六、无键使用示例6.1 定义一个简单的Blog和Post模型&#xff1a;6…

csdn 博客怎么设置背景图

一、效果图 话不多说&#xff0c;先看效果图&#xff1a; 二、操作步骤 点击创作中心&#xff1a; 点击博客设置&#xff1a; 编辑博客设置&#xff1a; 点击保存&#xff1a; 三、自定义背景图 csdn不支持自定义背景图&#xff0c;只支持选择背景主题。 四、其它

大模型日报|今日必读的10篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.谷歌推出新型 Transformer 架构&#xff1a;反馈注意力就是工作记忆 虽然 Transformer 给深度学习带来了革命性的变化&#xff0c;但二次注意复杂性阻碍了其处理无限长输入的能力。 谷歌研究团队提出了一种新型 T…

【vue】Pinia-2 安装Pinia,使用store

1. 安装Pinia 在项目路径下执行npm install pinia 在package.json中查看 2. 使用store 在main.js中添加 import { createPinia } from pinia const pinia createPinia()修改createApp方法 最后示例如下&#xff08;三处修改&#xff09; import { createApp } from vue //…

Linux-docker安装数据库redis

1.拉取redis镜像 docker pull redis # 下载最新的redis版本 docker pull redis:版本号 # 下载指定的redis版本ps&#xff1a;我这是已经下载最新版本的redis 2.查看redis镜像 docker images3.创建挂在路径并授权 mkdir -p /usr/local/redis/data mkdir -p /usr/local…