【C++】 —— 笔试刷题day_6
刷题day_6,继续加油哇!
今天这三道题全是高精度算法
一、大数加法
题目链接:大数加法
题目解析与解题思路

OK,这道题题目描述很简单,就是给我们两个字符串形式的数字,让我们计算这两个数字的和
看题目我们可以发现,题目所给的数组范围特别大,所以,我们使用int、long long肯定是不行的;
对于这种高精度算法题,我们解题思路呢也很简单,就直接模拟加法(加法竖式)就可以了。
怎么模拟呢?(这里自己给出两个数字,来模拟一下过程)
现在自己给出两个字符串
1314、521;我们来模拟一下这两个数字求和的过程

我们通过观察可以发现,在列竖式计算时:当前位的结果等于两个数当前位的和再加上进位数,(而进位数等于上一位的结果/10)最后再%10;
那我们就可以来模拟整个过程了:
这里有两种思路:
一就是先将字符串中的每一位转化成int并存储起来,再进行计算,最后转化成string结果返回
这种思路也是博主在做这道题时用的思路,实现起来并不算特别麻烦;
但是有一点,需要为
s、t和结果ret创建三个int类型的数组。
这里就不实现这一种思路了,来看第二种思路
第二种思路也是模拟整个过程,但是不需要创建数组来存储数据,直接从字符串的最后一位开始计算,结果直接存放在ret要返回的string中,直到结束
在整个过程中,我们需要注意:
- 计算结果是通过
push_back()尾插到结果中,所以在结果中个位是在前面的,在返回之前我们需要对其进行逆置。
代码实现
class Solution {
public:string solve(string s, string t) {// write code hereint i = s.size() - 1;int j = t.size() - 1;string ret;int tmp = 0;//进位数while(i>=0 || j>=0 ||tmp){if(i>=0)tmp+=(s[i--]-'0');if(j>=0)tmp+=(t[j--]-'0');ret+=(tmp%10 +'0');tmp/=10;}reverse(ret.begin(),ret.end());return ret;}
};
二、链表相加
题目链接:链表相加
题目解析

来看这一道题目,给我们两个单链表(9->3->7、6->3)每一个链表代表一个整数,让我们计算这两个链表所代表整数的和。
当然这一道题看起来和上一题类似,解法也类似,只不过多了一些链表的相关操作。
算法思路
我们通过题目给的示例可以发现,数字的最低位是在链表的结尾;
我们计算的时候都是从最低位开始计算的,所以本道题需要先将链表进行逆置再进行操作
整体思路如下:
- 首先将链表逆置。
- 再同时遍历两个逆置后的链表,计算结果,一位一位的头插到结果链表中。
- 最后返回结果链表即可。
这里解释一下为什么要用头插:因为我们是从个位开始计算的,而个位应该在链表的尾部,所以使用头插;就避免了使用尾插后再进行逆置链表。
逆置链表:
之前我们逆置链表是使用两个指针来逆置,这个就不多说了;
现在来看一种新的逆置方法
- 先定义一个链表的头节点,
- 再遍历原链表,将原链表的节点头插到定义的新链表中,
- 最后遍历结束,头结点的下一个节点就是逆置完的链表的第一个节点。
代码实现
现在来看代码实现:(当然这里也可以现将所以数取出来再进行计算)
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/
class Solution {public:ListNode* reverse(ListNode* head) {ListNode* phead = new ListNode(0);ListNode* cur = head;while (cur) {//头插法逆置链表ListNode* next = cur->next;cur->next = phead->next;phead->next = cur;cur = next;}ListNode* ret = phead->next;delete phead;return ret;}ListNode* addInList(ListNode* head1, ListNode* head2) {// write code herehead1 = reverse(head1);head2 = reverse(head2);int tmp = 0;ListNode* head = new ListNode(0);while (head1 != nullptr || head2 != nullptr || tmp) {if (head1) {tmp += head1->val;head1 = head1->next;}if (head2) {tmp += head2->val;head2 = head2->next;}int x = tmp % 10;ListNode* newnode = new ListNode(x);newnode->next = head->next;head->next = newnode;tmp /= 10;}ListNode* ret = head->next;delete head;return ret;}
};
三、大数乘法
题目链接:大数乘法
题目解析

这道题就有意思了,大数乘法,前两道我们都是算的加法,现在来看乘法;
给定字符串,计算这两个字符串对应的乘积;
算法思路
看到这道题,多多少少还是有那么一点思路的,我们还是需要模拟整个乘法的过程;
乘法呢,我们知道,一个数的每一位都要和另一个数去乘的,所以这里我们使用两层
for循环就可以解决问题。但是新的问题又来了,那就是个位、十位和百位与另一个数乘是不一样的;那乘完之后将数放到哪里呢?
这里定义一个vector,大小是m+n(m和n分别表示两个字符串的长度)。
我们现将两个字符逆置过来,这样个位所对应的下标就是0、十位就是1;
所以我们在计算乘的时候(一个数的个位与另一个数的每一位相乘)所得的积就要放在vector[i+j]中,什么意思呢?

可以看到,这样我们就知道了两个数的每一位相乘需要放到哪一个位置上了。
这里注意,我们在第一次计算的过程中最好不要进位(因为太麻烦了)
- 这里计算完成以后(不进位),我们遍历整个
vector数组,将其中的数依次进位,然后转换成字符;- 注意:遍历完
vector数组后,可能存在进位未转换,需要单独处理- 最后,我们需要对字符串进行一个去
0操作,就是将最高位的0去掉- 再逆置一下即可
代码实现
class Solution {
public:string solve(string s, string t) {// write code herereverse(s.begin(),s.end());reverse(t.begin(),t.end());int m = s.size();int n = t.size();vector<int> v(m+n,0);//不进位计算for(int i=0;i<m;i++){for(int j = 0;j<n;j++)v[i+j] += (s[i]-'0')*(t[j]-'0');}//处理进位int tmp = 0;string ret;for(auto e:v){tmp+=e;ret+=(tmp%10 + '0');tmp/=10;}//进位可能有余while(tmp){ret+=(tmp%10 + '0');tmp/=10;}//对最高位进行去0while(ret.size()>1 && ret.back()=='0')ret.pop_back();reverse(ret.begin(),ret.end());return ret;}
};
这三道高精度的算法题,希望对你有所帮助!
感谢支持
相关文章:
【C++】 —— 笔试刷题day_6
刷题day_6,继续加油哇! 今天这三道题全是高精度算法 一、大数加法 题目链接:大数加法 题目解析与解题思路 OK,这道题题目描述很简单,就是给我们两个字符串形式的数字,让我们计算这两个数字的和 看题目我…...
pytorch 网络结构可视化Netron安装使用方法(已解决)
首先 要把保存的训练模型 转为onnx格式的文件,然后打开下面的链接,选择刚刚转的onnx文件。 下载 Netron: 您可以访问 Netron 的官方网站 在线使用,或者下载桌面版本。 mnist_cnn_model.onnx 确定后, 2、TensorRT学习…...
QEMU 中 x86_cpu_realizefn 到 ept_emulation_fault 的调用流程解析(macos)
QEMU 中 x86_cpu_realizefn 到 ept_emulation_fault 的调用流程解析 在 QEMU 的 x86 虚拟化实现中,CPU 的初始化与执行流程涉及多个关键函数,从 CPU 设备的最终初始化(x86_cpu_realizefn)到虚拟机监控程序(HVF&#x…...
第六:go 操作 redis-go
Redis 在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。 Redis介绍 Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外&am…...
【蓝桥杯】每天一题,理解逻辑(4/90)【Leetcode 二进制求和】
题目描述 我们解析一下题目 我们可以理解到两个主要信息 给的是二进制的字符串返回他们的和 我们知道,十进制的加减法需要进位,例如:9716是因为91之后进了一位,二进制也是如此,只不过十进制是逢10进1,二…...
CentOS 7 更换 YUM 源为国内
**CentOS 7 更换 YUM 源为国内源 ** 背景说明 更换 YUM 源可加速软件下载,解决官方源访问慢的问题。国内推荐镜像源:阿里云、清华、网易、中科大。 一、备份原有 YUM 源 # 备份系统默认源(避免操作失误可恢复) sudo cp /etc/yum…...
快速入手-基于Django的mysql配置(三)
Django开发操作数据库更简单,内部提供了ORM框架。比如mysql,旧版本用pymysql对比较多,新的版本采用mysqlclient。 1、安装mysql模块 pip install mysqlclient 2、Django的ORM主要做了两件事 (1)CRUD数据库中的表&am…...
docker部署dify
1.安装docker 参考链接 https://ascendking.blog.csdn.net/article/details/136407383 设置docker源 vim /etc/docker/daemon.json {"registry-mirrors": ["https://docker.registry.cyou", "https://docker-cf.registry.cyou", "http…...
网络安全红蓝对抗实战演练,沉浸式对抗训练场上线!
在网络安全的世界里,没有永恒的盾牌,只有不断磨砺的利剑。近年来,某金融机构因系统漏洞导致千万级用户数据泄露,某制造企业因生产线遭遇勒索攻击被迫停产数日——这些真实案例揭示了一个残酷现实:传统的理论教学已无法…...
舞狮表演(dp)
#include <bits/stdc.h> using namespace std; const int N1e35; int main() {int t;cin>>t;while(t--){int n;cin>>n;int a[N][N];for(int i1;i<n;i){for(int j1;j<n;j){int x;cin>>x;if(x&1) a[i][j]1; // 如果金额是奇数,a[i]…...
【Qt】Qt + Modbus 服务端学习笔记
《Qt Modbus 服务端学习笔记》 1.因为项目的需要,要写一个modbus通信,csdn上感觉有些回答,代码是人工智能生成的,有些细节不对。我这个经过实测,是可以直接用的。 首先要包含Qt 的相关模块 Qt Modbus 模块主要包含以…...
squirrel语言全面介绍
Squirrel 是一种较新的程序设计语言,由意大利人 Alberto Demichelis 开发,其设计目标是成为一个强大的脚本工具,适用于游戏等对大小、内存带宽和实时性有要求的应用程序。以下是对 Squirrel 语言的全面介绍: 语言特性 动态类型&a…...
SpringBoot配置文件加载优先级
目录 示例 配置文件&编写配置类 在Spring Boot项目中,配置属性的优先级是一个重要的概念,它决定了当存在多个配置源时,哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级,从最高到最低: 命令行参数…...
【详细解决】pycharm 终端出现报错:“Failed : 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
昨天在终端一顿操作后突然打开pycharm时就开始报错: 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 Failed to act…...
CXL协议之FM(Fabric Management)解释
CXL协议中的FM功能详解 1. FM的核心作用 FM是CXL(Compute Express Link)架构中的核心管理实体,负责协调和管理CXL设备之间的通信、资源分配及拓扑结构。其核心功能包括: 设备发现与枚举:识别CXL拓扑中的设备&#x…...
用Promise实现ajax的自动重试
有时候遇到网络错误,希望可以多试几次,可以利用Promise递归调用实现 以若依系统的登出举例 export function logout() {return request({url: /logout,method: post}) } 修改下原本的登出逻辑,遇到ERR_NETWORK错误,也就是网络问…...
Unity URP 实现场景和UI添加后处理
在更新到URP之后,之前内置的渲染管线的那一套后处理已经无法使用,接下来,我们使用URP的内置后处理实现对场景和UI的后处理。 设置UI 如果UI需要使用后处理,在Canvas里,我们要选择Screen Space - Camera,然…...
搭建ISCSI传输的配置与管理
前提是: windows server2019设置成桥接模式,因为要让虚拟机和主机设置成一个网段,才能通过网络进行新建虚拟磁盘。 1.添加ISCSI角色 安装位置 选择文件和存储服务----------文件和iscsl 服务------------iscsl目标服务器 2.右上角点击任务&a…...
华为参访预约,团队考察体验黑科技之旅
华为参观学习背景 全球第1,中国骄傲 成立于1987年的华为,早在2013年其销售收入就已超过爱立信,成为全球行业第1名。2019年福布斯世界500强排名第61位,全球唯1一家没有上市的民营企业。目前,华为5G技术已经走在世界前沿…...
Java 设计模式之享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern) 是一种 结构型设计模式,旨在通过共享对象来有效支持大量细粒度对象的复用,从而减少内存占用和提高性能。其核心是 分离内部状态(可共享)与外部状态(不可共享&#…...
C#入门学习记录(三)C#中的隐式和显示转换
C#类型转换:隐式与显式转换的机制与应用 在C#的强类型体系中,数据类型转换是实现数据交互和算法逻辑的基础操作。当数值类型范围存在包含关系,或对象类型存在继承层次时,系统通过预定义的转换规则实现类型兼容处理。隐式转换&…...
Rk3568驱动开发_设备树_9
什么是设备树? 以我目前的理解,设备树更像日常生活中用的地图,用户能根据地图去寻找到相应位置 设备树也是如此它描述了硬件设备的连接关系和配置信息,供 CPU(或者更准确地说,是操作系统内核)…...
一和零 (leetcode 474
leetcode系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 本题是一个01背包问题,只是背包是一个二维数组的背包,分别为0的个数不能超过m,1的个数不能超过n,而物品就是题目中的字符串,其容量为0和1的…...
深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)
原文链接:从零开始的DeepSeek微调训练实战(SFT) 微调参考示例:由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…...
【AI News | 20250320】每日AI进展
AI Repos 1、servers 该仓库提供详细入门指南,用户可通过简单步骤连接Claude客户端,快速使用所有服务器功能。此项目由Anthropic管理,展示MCP的多样性与扩展性,助力开发者为大语言模型提供安全、可控的工具与数据访问。 2、awe…...
从零开始实现 C++ TinyWebServer 阻塞队列 BlockQueue类详解
文章目录 阻塞队列是什么?为什么需要阻塞队列?BlockQueue 成员变量实现 push() 函数实现 pop() 函数实现 close() 函数BlockQueue 代码BlockQueue 测试 从零开始实现 C TinyWebServer 项目总览 项目源码 阻塞队列是什么? 阻塞队列是一种线程…...
Linux驱动开发基础(can)
目录 1.can的介绍 2.can的硬件连接 2.1 CPU自带can控制器 2.2 CPU没有can控制器 3.电气属性 4.can的特点 5.can协议 5.1 can的种类 5.2 数据帧 5.2.1 标准数据帧格式 5.3.1 扩展数据帧格式 5.3 遥控帧 5.4 错误帧 5.5 过载帧 5.6 帧间隔 5.7 位填充 5.8 位时…...
5.2《生活中的透镜》——5.3《凸透镜成像规律》讲后再上
教会什么:照相机、投影仪、放大镜的原理 培养什么:(再说) 课标: (二)运动和相互作用 2.3 声和光 2.3.5了解凸透镜成像规律的应用。 例7 了解凸透镜成像规律在放大镜、照相机中的应用。 一、导入 提问:生活中有哪些透镜?(放大镜、照相机、投影仪/幻灯机) ——直接提出…...
【LangChain入门 3 Prompts组件】聊天提示词模板 ChatPromptTemplate
文章目录 一、 聊天信息提示词模板1.1 使用关键字1.2 使用SystemMessage, HumanMessage, AIMessage来定义消息1.3 使用MessagesPlaceholder 在特定未知添加消息列表 二、关键类介绍2.1 ChatPromptTemplate 类2.1.1 from_messages()2.1.2 format_messages()2.1.3 format_prompt(…...
fastadmin后台管理员日志指定方法不记录
做的订单提醒,只要在线会把日志自动存储进去,这个又是每30s执行一次,数据库没多久就爆掉了,最终找到一个处理方法,可能不是最好的,仅供大家参考 具体位置: application/admin/model/AdminLog.php里面的$ignoreRegex方法 protected static $ignoreRegex [/^(.*)\/(selectpage…...
