蓝桥杯真题------R格式(高精度乘法,高精度加法)

server/2025/4/1 21:35:43/

对于高精度乘法和加法的同学可以学学这几个题
高精度乘法
高精度加法


文章目录

  • 题意
  • 分析
    • 部分解
    • 全解
  • 后言

题意

在这里插入图片描述
给出一个整数和一个浮点数,求2的整数次幂和这个浮点数相乘的结果最后四舍五入。、

分析

我们可以发现,n的范围是1000,2的1000次方非常大,我们用pow只能求到2的31次方左右,即便我们开了long long也是远远不够的,所以我们显然可以知道,这题肯定是用高精度来写的。
不过如果在比赛的时候没有时间敲高精度(确实很费时间),我们直接暴力跑他这个小范围拿个部分分算了。👇下面给大家看看正解和部分解

部分解

在这里插入图片描述
直接用上最简单的方法,round函数求四舍五入,pow求2的n次幂。然后直接就暴力写了。下面看一下这个代码。

void Solve () {int n;double x;cin>>n>>x;int t = pow(2,n);long double pos = round(t*x);cout<<pos;return ;
}

这个方法显然不是很好,但是简单。下面看下正解(我的写法,不知道是不是正解,但是过题就是正解)

全解

在这里插入图片描述

对于2的n次幂我们可以求n次高精度,每一次和2相乘,这个时间复杂度我们是可以接受的。
对于浮点数,我们可以直接忽略小数点,在二者相乘完之后我们在往后加小数点,最后根据小数点的位置我们再四舍五入判断再加一,不过这个加一我们不能简单的加一,我们要用高精度。
不过我想了一下发现好像遍历着相加好像更简单
难点部分就是在于高精乘,如果有模板的话,直接复制粘贴一会就写完了,不过没有的话,我们就只能自己手撸了。好难撸

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define fi first
#define se second
#define ALL(x) x.begin(),x.end()
#define PII pair<int,int>
#define pb push_backint a[12000],b[12000],c[12000];
string gaojin (string s,string y) {//高精乘模板memset(a,0,sizeof a);memset(b,0,sizeof b);memset(c,0,sizeof c);for (int j=s.size()-1,i = 0;j>=0;j--,i++)a[i]=s[j]-'0';for (int i=0,j=y.size()-1;j>=0;i++,j--)b[i]=y[j]-'0';for (int i=0;i<y.size();i++){for (int j=0;j<s.size();j++)c[i+j]+=a[j]*b[i];}int f=s.size()+y.size();for (int i=0;i<f;i++){if (c[i]>=10){c[i+1]+=c[i]/10;c[i]%=10;}}while (c[f]==0&&f>0)f--;string ans="";for (int i=f;i>=0;i--) ans.insert(ans.end(),c[i]+'0');return ans;	
}string gaojinjia (string s1,string s2) {//高精加模板memset(a,0,sizeof a);memset(b,0,sizeof b);memset(c,0,sizeof c);for (int i=s1.size()-1,j=0;i>=0;i--,j++) a[j] = s1[i]-'0';for (int i=s2.size()-1,j=0;i>=0;i--,j++) b[j] = s2[i]-'0';int k = max(s1.size(),s2.size());for (int i=0;i<k;i++) {c[i] += a[i]+b[i];if (c[i]>=10) {c[i+1] += c[i]/10;c[i]%=10;}}string ans;if (c[k]!=0) k++; for (int i=k-1;i>=0;i--) ans.insert(ans.end(),c[i]+'0');return ans;
}void Solve () {int n;string s;//直接读入string形s,方便高精操作cin>>n>>s;string t = "1";while (n--) t = gaojin(t,"2");//不断用高精乘2求2的n次幂int w = s.find('.');string s1 = s.substr(0,w);string s2 = s.substr(w+1);string S = s1+s2;//将小数点去掉,但是用erase的时候不知道哪里错了,就用简单的加减了w = s.size()-w-1;//求出小数点在哪里string T = gaojin(S,t);//T是乘完之后的数,包括整数和小数,不过小数点没有明确char ch = T[T.size()-w];//找到小数点的位置后一位的数字string ans1 = T.substr(0,T.size()-w);//将整数部分提取出来if (ch>='5')  cout<<gaojinjia(ans1,"1");//如果小数点后一位大于5,就高精+1else cout<<ans1;return ;
}signed main () {ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int _ = 1;
//	 cin >> _ ;while (_--) Solve (); return 0;
}

⚠️注意初始化!!!注意数组范围!!!
由于我总是忘记初始化,所以总是被卡很长时间,写的比较丑陋,对不起。

后言

这题是真的难写,难度到不是很大,就是一个模拟题,不过码量是真不少。写了一下又帮助自己回忆了一下高精度的知识。多加练习,不然容易生疏。


http://www.ppmy.cn/server/180449.html

相关文章

《Keras 3 :AI 使用图神经网络和 LSTM 进行交通流量预测》

《Keras 3 &#xff1a;AI 使用图神经网络和 LSTM 进行交通流量预测》 作者&#xff1a; Arash Khodadadi 创建日期&#xff1a; 2021/12/28 最后修改时间&#xff1a; 2023/11/22 描述&#xff1a; 此示例演示如何对图形进行时间序列预测。 &#xff08;i&#xff09; 此示例…

WPF 自定义行为AssociatedObject详解

AssociatedObject 是在使用 WPF 行为&#xff08;Behaviors&#xff09;时非常重要的一个属性。当你创建一个自定义行为并继承 Behavior<T> 类时&#xff0c;AssociatedObject 属性提供了对行为所附加到的控件&#xff08;即目标控件&#xff09;的引用。 AssociatedObj…

VMware Ubuntu 网络配置全攻略:从断网到畅通无阻

一、网络连接模式选择&#xff08;先搞懂原理&#xff09; VMware提供三种网络模式&#xff0c;就像手机的不同网络套餐&#xff1a; 模式适用场景特点类比NAT个人上网/新手首选虚拟机共享主机IP&#xff0c;能上网但隐身家用WiFi桥接服务器/需要被局域网访问虚拟机会获得独立…

web权限划分提权和移权

前言&#xff1a;权限的基本认知 渗透权限划分&#xff1a;假如我们通过弱口令进入到web的后台 这样我们就拿到了web的管理员权限 管理员权限是web中最高的权限&#xff08;一般我们进入web的时候数据库会进行用户权限的划分&#xff1a;假设 0-10为最高的权限 11-10000为普通…

飞书电子表格自建应用

背景 coze官方的插件不支持更多的飞书电子表格操作&#xff0c;因为需要自建应用 飞书创建文件夹 创建应用 开发者后台 - 飞书开放平台 添加机器人 添加权限 创建群 添加刚刚创建的机器人到群里 文件夹邀请群 创建好后&#xff0c;就可以拿到id和key 参考教程&#xff1a; 创…

循相似之迹:解锁协同过滤的核心推荐逻辑

目录 一、引言二、协同过滤的基本原理三、协同过滤的算法类型&#xff08;一&#xff09;基于用户的协同过滤&#xff08;二&#xff09;基于物品的协同过滤 四、协同过滤的应用案例&#xff08;一&#xff09;电商平台的商品推荐&#xff08;二&#xff09;音乐平台的歌曲推荐…

【教程】RF-DETR:SOTA实时目标检测模型介绍与使用教程

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

Qt Concurrent Filter and Filter-Reduce

并行滤波和滤波-还原 QtConcurrent::filter()、QtConcurrent::filtered() 和 QtConcurrent::filedReduced() 函数并行过滤序列中的项目&#xff0c;如QList 。QtConcurrent::filter() 就地修改序列&#xff0c;QtConcurrent::filtered() 返回包含过滤内容的新序列&#xff0c;…