笔试练习day6

news2024/11/18 6:02:01

目录

  • 大数加法
    • 题目解析
      • 解法
        • 代码
  • 链表相加(二)
    • 题目解析
      • 解法
        • 逆序链表函数
        • 代码
  • 大数乘法
    • 题目解析
      • 解法
        • 代码

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐣🐣 python
🐓🐓🐓 数据结构C语言
🐔🐔🐔 C++
🐿️🐿️🐿️ 文章链接目录
🏀🏀🏀 笔试练习题

大数加法

链接大数加法
在这里插入图片描述

题目解析

这道题就是模拟计算的过程
在这里插入图片描述
比如123+789,我们先让各位的相加,因为涉及到进位,所以需要有一个中间变量t保存进位的数
比如3+9=12.需要进1,就用中间变量t=1
计算十位的时候2+8+t=11,再让t=1

解法

因为是以字符串形式去返回的,所以我们需要定义一个string ret
并且计算的过程中需要知道字符串有多少个字符,所以我们用sizes和sizet分别表示字符串s和字符串t有多少个字符
因为从个位开始计算,然后一直进位,所以我们要进行while循环,循环条件即是sizes和sizet的大小大于等于0,且在最后的时候我们还需要保证中间变量tmp为0,因为如果tmp不为0的话就说明还要进位,我们还需要进行一次循环,否则就会丢失数据
循环内部我们要分别对sizes和sizet进行判断,如果sizes已经为负数了,那就不将s[sizes]进行相加
因为是分别判断所以每次判断如果符合条件就和tmp进行相加
在两个判断都结束后,要将tmp的个位通过+=的形式追加到ret的尾部,然后让tmp保留十位的数
最后再用reverse进行逆序

具体过程如下图,s为12,t为89,tmp初始化为0

在这里插入图片描述
在这里插入图片描述
将tmp的个位追加到ret尾部
在这里插入图片描述
让tmp等于他的十位上的数字
在这里插入图片描述
之后重复上面操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后将ret进行逆序,因为是尾插

代码
class Solution {
public:
  
    string solve(string s, string t) {
        string ret;
  int sizes=s.size()-1,sizet=t.size()-1;
  int tmp=0;
  while(sizes>=0||sizet>=0||tmp)
  {
    if(sizes>=0)
        tmp+=s[sizes--]-'0';
    if(sizet>=0)
        tmp+=t[sizet--]-'0';
        ret+=tmp%10+'0';
        tmp/=10;
  }
reverse(ret.begin(),ret.end());
return ret;
    }
};

链表相加(二)

链接链表相加(二)
在这里插入图片描述

题目解析

这道题和上一道题很相似,只不过这个是链表
链表有个难点就是我们要实现加法的话应该是从后往前加,但是由于是链表,如果我们从后往前加的话会找不到前一个节点
所以我们要先对链表进行逆序

解法

这里的解法会用到一个常用的操作就是创建一个虚拟头节点,有了这个虚拟头结点,我们就不需要考虑链表为空的情况

逆序链表函数
ListNode* reverse(ListNode* head) {
        ListNode* newHead = new ListNode(0);
        ListNode* cur = head;
        while (cur) {
            ListNode* next = cur->next;
            cur->next = newHead->next;
            newHead->next = cur;
            cur = next;
        }
        cur = newHead->next;
        delete newHead;
        return cur;
    }

逆序链表函数传递一个头结点的指针,然后创建一个虚拟头结点
注意这个虚拟的头结点ListNode(0)表示的是val=0,next为空
在这里插入图片描述
将原链表的头结点给到cur去遍历链表,然后头插,在头插的时候要保留cur的下一个节点,否则头插完一次后就找不到下一个节点的地址了
具体过程如下
在这里插入图片描述
cur->next=newHead->next,此时的cur不再指向next
在这里插入图片描述
newHead->next指向cur
在这里插入图片描述
整理一下就变成下面这样了
在这里插入图片描述
重复上面的操作,cur->next指向newHead->next,此时的newHead->next指向的是节点1,所以cur->next指向节点1
在这里插入图片描述
再让newHead->next指向cur
在这里插入图片描述
整理后变成了这样
在这里插入图片描述
让cur指向newHead->next,也就是节点2
在这里插入图片描述
让newHead->next指向cur
在这里插入图片描述
最后整理后变成这样,因为这次的next为空,让cur=next后,cur也就为空,while循环判断的cur是否为空,所以这次会直接跳出循环
在这里插入图片描述

循环跳出后将cur指向newHead->next,再销毁newHead
在这里插入图片描述

代码
  
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        head1 = reverse(head1);
        head2 = reverse(head2);
        int t = 0;
        ListNode* cur1 = head1, *cur2 = head2;
        ListNode* ret = new ListNode(0);
        ListNode* prev = ret;
        while (cur1 || cur2 || t) {
            if (cur1) {
                t += cur1->val;
                cur1 = cur1->next;
            }
            if (cur2) {
                t += cur2->val;
                cur2 = cur2->next;
            }
            prev = prev->next = new ListNode(t % 10);
            t /= 10;

        }
        cur1 = ret->next;
        ret->next = nullptr;
        delete ret;
        return reverse(cur1);
    }
};

将两个链表分别逆序,这样做的目的是可以实现个位和个位相加…
用一个变量t保存进位,并且用两个指针cur1和cur2指向两个逆序链表的头节点
创造出一个链表ret保存两个逆序链表相加的结果,并用一个指针prev指向ret头结点
因为要两个逆序链表一起遍历相加,所以用while循环,while循环的判断是cur1||cur2||t不为0
因为可能会出现已经有一个逆序链表遍历完了,而另一个没有遍历完,所以还需要进行遍历,而t不为0是考虑的进位的问题
在循环内部用if语句去判断cur1和cur2是否为空,如果不为空就让cur的val与t相加,同时让cur走到下一个节点
每进行一次循环后都需要保存他们相加的值到prev->next里面去,但是要注意的是t可能大于10,所以我们保存的值应该为t%10
prev = prev->next = new ListNode(t % 10)可以拆分成
prev->next = new ListNode(t % 10)
prev = prev->next
之后让t=t/10,使t保存进位

大数乘法

链接大数乘法

在这里插入图片描述

题目解析

这里的方法和第一题是一样的,并且顺便说一下为什么要用字符串的形式读入和输出,这是因为有些数字太大了已经超出最大的范围,所以用字符串的形式

解法

这里的解法是无进位相乘然后相加,但是要注意的是这和我们平时计算的方式有一点不同
我们平时计算是进位与计算同时进行的,而这里我们是直接进行计算不进位,在计算完后将进位的数字进行相加
过程如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码
    string solve(string s, string t) {
        reverse(s.begin(), s.end());
        reverse(t.begin(), t.end());
        int m = s.size(), n = t.size();
        vector<int>tmp(m + n);
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                tmp[i + j] += (s[i] - '0') * (t[j] - '0');

            }
        }
        int c = 0;
        string ret;
        for (auto x : tmp) {
            c += x;
            ret += c % 10 + '0';
            c /= 10;
        }
        while (c) {
            ret += c % 10 + '0';
            c /= 10;
        }
        while (ret.size() > 1 && ret.back() == '0')
            ret.pop_back();
        reverse(ret.begin(), ret.end());
        return ret;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ansible 配置

目录 1.集群自动化维护工具 ansible 2.ansible管理架构 3.安装ansible 4.Iventory主机模式 5.通过ping验证 6.ansible常用模块 7.命令行模块 7.1command模块 7.2shell模块 7.3scripts模块 7.4file模块 7.5copy模块​ 7.6yum模块 1.集群自动化维护工具 ansibl…

关于三维布尔运算的思考(2)

1.前言 三维布尔运算是几何内核的核心算法之一&#xff0c;博主前述文章中提到过布尔算法有多种&#xff0c;可以根据几何数据表达方式分为Brep布尔运算、CSG布尔运算、网格布尔运算等&#xff0c;而网格布尔运算又又多种&#xff0c;如BSP方式、八叉树方式&#xff0c;详细可参…

BFS 解决最短路问题详解

BFS 解决最短路问题 题目一&#xff1a;迷宫中离⼊⼝最近的出⼝1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3.算法思路&#xff1a;4.代码 题目二. 最⼩基因变化1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3.算法思路&#xff1a;4.代码 题目三&#xff1a;单词接⻰…

【WSL安装后,如何互相访问文件系统】

WSL安装后&#xff0c;无法访问linux文件系统 WSL的一个优点就是可以可以直接访问 Windows 文件系统&#xff0c;反之亦然&#xff0c;方便文件共享和操作。 那么安装好以后&#xff0c;WSL的linux文件系统的目录在磁盘哪个位置呢&#xff1f; 在 WSL 中&#xff0c;Linux 文…

【React】react项目中的redux使用

1. store目录结构设计 2. react组件中使用store中的数据——useSelector 3. react组件中修改store中的数据——useDispatch 4. 示例 react-basic\src\store\moduels\counterStore.js import { createSlice } from reduxjs/toolkitconst counterStore createSlice({name: cou…

数据结构-3.5.队列的顺序实现

一.队列的顺序实现&#xff0c;初始化操作以及判断队列是否为空&#xff1a; 1.图解&#xff1a; 2.代码&#xff1a; #include<stdio.h> #define MaxSize 10 //定义一个队列最多存储的元素个数 ​ typedef struct {int data[MaxSize]; //用静态数组存放队列元素int f…

UART 如何实现波特率自动检测原理介绍

为什么需要波特率自动检测机制 我们都知道&#xff0c;串口通讯是需要约定波特率才能够进行准确的通讯。此时假设&#xff0c;你们公司开发了一个板子&#xff0c;有一个串口与外接设备进行通讯。因为你们公司开发的产品要提供给多个客户&#xff0c;而有些客户可能之前就有一…

E9OA解决文档附件没有关联文档正文问题

业务背景&#xff1a; OA通知流程已经提交后在审批中发现漏上传了文档附件。临时放开审批结点文档附件编辑&#xff0c;请审批结点领导将附件上传后再审批。最终在流程中查看可以看到正文和附件&#xff0c;但是在通知文档正文中没有关联文档附件&#xff0c;导致大多数人员在通…

crypto-js解密报错malformed utf-8 data

在进行加解密处理时出现这个问题。 但是当在一个完整程序运行环境内加密字符串&#xff0c;解密字符串是没问题的。 当把加密的字符存储到txt文件&#xff0c;在读取解密时出现错误无法解密。 最后&#xff0c;使用res.replace(/\s/g,‘’)正则过滤掉txt文件内的空格就成功了。…

电商技术选型:Spring Boot在线商城系统

4 系统设计 ONLY在线商城系统的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没有经…

[ComfyUI]Flux:太美了!古风华服与现代DJ演绎。灼灼荷花瑞,亭亭出水中

大家好我是安琪&#xff01;&#xff01;&#xff01; F.1-汉服人像艺术-国风-氛围感 简介 今天介绍一款Flux LORA模型&#xff1a;F.1-汉服人像艺术-国风-氛围感-liangyi&#xff0c;这是一款以古代汉服女性写真为主题的Flux LORA模型。属于人物主体&#xff0c;增加中国传统…

Java项目实战II基于Java+Spring Boot+MySQL的学院班级回忆录(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 在时光的长河中&#xff0c;班级的记忆如同璀璨星辰&#xff0c;照亮了我们共同的青春岁月。为了珍藏…

Redis篇(应用案例 - 商户查询缓存)

目录 一、什么是缓存? 二、为什么要使用缓存 三、如何使用缓存 四、添加商户缓存 1. 缓存模型和思路 2. 代码如下 五、缓存更新策略 1. 内存淘汰 2. 超时剔除 3. 主动更新 六、数据库缓存不一致解决方案 1. 数据库缓存不一致解决方案 2. 数据库和缓存不一致采用什…

C++之STL—常用集合算法

set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); // 求两个集合的交集 // **注意:两个集合必须是有序序列** // beg1 容器1开始迭代器 // end1 容器1结束迭代器 // beg2 容器2开始迭代器 // end2 容器2结束迭代器 //…

评估员工绩效的 5 个最佳实践

使用目标。 员工目标是设定期望和评估员工绩效的最有效、最客观的方式。由于目标是在年初或季度初由员工和经理共同制定的&#xff0c;因此双方可以在此过程中讨论他们期望在特定时期内完成的目标&#xff0c;并就成功的样子达成一致。 例如&#xff0c;如果内容营销人员的个人…

代码随想录_刷题笔记_第三次

字符串 — KMP算法&#xff08;理论&#xff09; **解决问题&#xff1a;**字符串匹配的问题&#xff08;eg&#xff1a;文本串 aabaabaaf 模式串 aabaaf 求在文本串中是否出现过模式串&#xff09; **暴力匹配&#xff1a;**当 b 和 f 不匹配时&#xff0c;整体向后跳一位再进…

婚恋交友小程序的设计思路与用户体验优化

在数字化时代&#xff0c;婚恋小程序作为一种新兴的婚恋交友平台&#xff0c;正逐渐成为单身人士寻找伴侣的重要工具。一个优秀的婚恋小程序不仅要有创新的设计思路&#xff0c;还要注重用户体验的优化。编辑h17711347205以下是婚恋小程序的设计思路与用户体验优化的详细阐述&a…

【设计模式】精通高级行为模式:揭秘状态、中介者及其它模式的深层机制

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 【设计模式】万字详解…

PDD 各岗位薪资一览表

PDD 昨天聊到 PDD 可能会执行双休政&#xff0c;当中提到了「PDD 的年包在互联网行业中名列前茅」&#xff0c;不少同学一下子来兴趣了。 我这里也从脉脉中找到一份较新的 PDD 各岗位薪资一览表&#xff1a; 注意&#xff0c;这里的平均月薪的计算方式是年收入除以 12&#xff…

U盘打开提示要格式化:深度解析、恢复策略与预防之道

现象透视&#xff1a;U盘遭遇格式化预警 在日常的数字生活中&#xff0c;U盘作为便捷的数据存储与传输工具&#xff0c;扮演着不可或缺的角色。然而&#xff0c;当您满怀期待地插入U盘准备访问数据时&#xff0c;却可能遭遇系统突如其来的提示——“U盘需要格式化才能使用”。…