刷题强训(day06) -- 大数加法、链表相加、大数乘法

目录

1、大数加法

1.1 题目

1.2 思路

1.3 代码实现

2、链表相加(二)

2.1 题目

2.2 思路

2.3 代码实现

3、大数乘法

3.1 题目

3.2 思路

3.3 代码实现


1、大数加法

1.1 题目

1.2 思路

这道题可以模拟列竖式相加解答, 将每一位都转换为数字求和,最后在转回字符串返回。

先求得两个字符串的长度,采用预处理一位一位的相加,定义一个变量表示进位

最后,我们算完后是逆序的结果,应该输出正序的结果,所以用reverse逆置一下

1.3 代码实现

class Solution {
public:string solve(string s, string t) {string ret;int i = s.size() - 1,j = t.size() - 1;int tmp = 0;//表示进位while(i >= 0 && j >= 0 || tmp > 0) //模拟加法{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;}
};

2、链表相加(二)

2.1 题目

2.2 思路

这题和上题类似,只不过是用链表完成加法,用高精度加法,先把原来的链表逆序,在使用高精度加法

创建一个虚拟头结点,就可以不用考虑节点为空的情况了,因为要链表都需要逆序,所以可以先封装一个逆序函数,模拟头插,循环插入,直到链表逆序,然后循环实现个位上的加法

2.3 代码实现

记得定义一个next记录原链表的下一个节点,否则cur不能回去原链表继续遍历

class Solution 
{
public:ListNode* reverse(ListNode* head){ListNode* newhaead = new ListNode(0);ListNode* cur = head;while(cur){ListNode* next = cur->next;cur->next = newhaead->next;newhaead->next = cur;cur = next;}cur = newhaead->next;delete[] newhaead;return cur;}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->next = new ListNode(t%10);prev = prev->next;t /= 10;}prev = ret->next;ret->next = nullptr;delete[] ret;prev = reverse(prev);return prev;}
};

3、大数乘法

3.1 题目

3.2 思路

 这道题也和第一题类似,不过这道题是实现字符串乘法,化繁为简,把乘数换成加法运算

无进位相乘

用无进位相乘,下标映射会非常舒服

3.3 代码实现

注意进位未处理和先导0

class Solution {
public: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);// 无进位相乘相加,先固定s中一个数for(int i = 0;i < m;i++){    //然后依次与t中的数相乘for(int j = 0;j < n;j++){tmp[i+j] += (s[i]-'0') * (t[j]-'0');   }}//处理进位int k = 0;string ret;for(auto x : tmp){k += x;ret += k % 10 +'0';k /= 10;}while(k){    //防止还有进位未处理ret += k%10 +'0';k /= 10;}while(ret.size() > 1 && ret.back()=='0')ret.pop_back(); //处理前导0reverse(ret.begin(),ret.end());return ret;}
};


本篇完,下篇见!

 

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

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

相关文章

Java多线程编程(四)- 阻塞队列,生产者消费者模型,线程池

目录&#xff1a; 一.阻塞队列 二.线程池 一.阻塞队列 1.阻塞队列是⼀种特殊的队列. 也遵守 "先进先出" 的原则 阻塞队列能是⼀种线程安全的数据结构, 并且具有以下特性&#xff1a; 1.1.当队列满的时候, 继续入队列就会阻塞, 直到有其他线程从队列中取走元素 1.…

open3d

open3d open3d用于 3D 数据处理的现代库。 简介 Open3D 是一个开源库&#xff0c;支持快速开发处理 3D 数据的软件。Open3D 前端公开了一组精心挑选的 C 和 Python 数据结构和算法。后端经过高度优化&#xff0c;并设置为并行化。Open3D 是从零开始开发的&#xff0c;具有一更…

洞察鸿蒙生态,把握开发新机遇

随着科技的不断进步&#xff0c;鸿蒙系统以其独特的分布式架构和跨设备协同能力&#xff0c;逐渐在智能手机、智能穿戴、车载、家居等多个领域崭露头角&#xff0c;与安卓、iOS形成三足鼎立之势。作为一名开发者&#xff0c;我对鸿蒙生态的认知和了解如下&#xff1a; 一、鸿蒙…

adb 如何通过wifi连接手机

1. 电脑通过USB线连接手机 1.1手机开启开发者模式 以小米手机为例&#xff1a;连续点击OS版本系统&#xff08;设置–>我的设备–>全部参数&#xff09; 1.2在开发者模式下&#xff0c;启动允许USB安装与USB调试 操作步骤&#xff1a;设置>更多设置>开发者选项&g…

【webrtc】 RTP 中的 MID(Media Stream Identifier)

RTP 中的 MID(Media Stream Identifier) RID及其与MID的区别 cname与mid的对比【webrtc】CNAME 是rtprtcp中的Canonical Name(规范化名称) 同样都是RTP头部扩展: 基于mediasoup的最新的代码,学习,发现mid在创建RtpSendStream时是必须传递的参数: 例如 D:\XTRANS\soup\…

brother:什么是兄弟,你悟了吗?

brother&#xff08;兄弟&#xff09;这个单词好奇怪哦&#xff0c;它为什么就会是兄弟呢&#xff1f;为什么这样书写、这些字母组合在一起&#xff0c;就是兄弟呢&#xff1f;而且&#xff0c;西方人的兄弟brother一词和姐妹sister一词&#xff0c;并不是像中国人所称呼明确指…

如何在谷歌浏览器中优化内存使用

在日常使用电脑的过程中&#xff0c;我们经常会遇到系统资源被大量占用的情况&#xff0c;尤其是内存。谷歌浏览器作为一个广泛使用的网络浏览器&#xff0c;其内存占用问题也备受关注。本文将详细介绍如何在谷歌浏览器中优化内存使用&#xff0c;以提升浏览体验和系统性能。&a…

谷歌浏览器支持的开发者工具详解

谷歌浏览器&#xff08;Google Chrome&#xff09;是全球最受欢迎的网页浏览器之一&#xff0c;它不仅提供了快速、安全的浏览体验&#xff0c;还为开发者提供了强大的开发者工具。本文将详细介绍如何使用谷歌浏览器的开发者工具&#xff0c;并解答一些常见问题。&#xff08;本…

推荐一款多物理场模拟仿真软件:STAR-CCM+

Siemens STAR-CCM是一款功能强大的计算流体力学(CFD)软件&#xff0c;由西门子公司推出。它集成了现代软件工程技术、先进的连续介质力学数值技术和卓越的设计&#xff0c;为工程师提供了一个全面的多物理场仿真平台。主要特点与优势&#xff1a;多物理场仿真、自动化与高效、高…

无人机飞手考证,地面站培训技术详解

无人机飞手考证及地面站培训技术涉及多个关键方面&#xff0c;以下是对这些方面的详细解析&#xff1a; 一、无人机飞手考证流程与要求 1. 证书类型 民用无人机驾驶员证书&#xff1a;这是国家民航局颁发的无人机操作人员资质证书&#xff0c;分为视距内驾驶员、超视距驾驶员…

SpringMVC全面复习

Javaweb SpringMVC Spring MVC是Spring框架的一个模块&#xff0c;专门用于构建Web应用程序的模型-视图-控制器&#xff08;MVC&#xff09;架构。它通过清晰的分离关注点&#xff0c;简化了Web应用各部分的开发。Spring MVC提供了强大的绑定机制&#xff0c;能够将请求参数绑定…

python基础大杂烩

命令提示符程序&#xff0c;输入python&#xff0c;运行python程序 代码通过解释器程序翻译给计算机去执行 命令提示符输入的python本质上就是调用D:/dev/python/python3.12.5/python.exe这个解释器程序 有python程序将输入的代码翻译成二进制的0和1&#xff0c;去向计算机去运…

MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下MathGPT的原理介绍&#xff0c;在中小学数学教学的应用场景&#xff0c;以及代码样例实现。MathGPT的核心架构是一个精心设计的多层次系统&#xff0c;旨在有效处理复杂的数学问题。其主要组成部分包括 数学知识图谱…

算法演练----24点游戏

给定4个整数&#xff0c;数字范围在1~13之间任意使用-*/&#xff08;&#xff09;&#xff0c;构造出一个表达式&#xff0c;使得最终结果为24&#xff0c; 方法一 算法分析&#xff1a;加括号和取出重复表达式 # 导入精确除法模块&#xff0c;使得在Python2中除法运算的行为更…

关于指针p有关的3个值

1&#xff0c;他的类型是int*; 2,*p是解用&#xff0c;指向的是对象 3&#xff0c;&p指向的是p的地址&#xff0c;是指针的地址

《JavaEE进阶》----20.<基于Spring图书管理系统①(登录+添加图书)>

PS&#xff1a;关于接口定义 接口定义&#xff0c;通常由服务器提供方来定义。 1.路径&#xff1a;自己定义 2.参数&#xff1a;根据需求考虑&#xff0c;我们这个接口功能完成需要哪些信息。 3.返回结果&#xff1a;考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…

Linux服务管理-iSCSI

iSCSI 基础知识 iSCSI&#xff08;Internet Small Computer System Interface&#xff09;协议是一种基于IP网络的存储协议&#xff0c;它允许主机&#xff08;计算机或服务器&#xff09;通过TCP/IP网络访问远程存储设备。该协议具有以下主要特点&#xff1a; 灵活性&#xf…

快速掌握——python类 封装[私有属性方法]、继承【python进阶】(内附代码)

1.类的定义 与 实例化对象 在python中使用class关键字创建一个类。 举例子 class Stu(object):id 1001name 张三def __init__(self):passdef fun1(self):pass# 实例化对象 s1 Stu() s2 Stu() print(s1.name) print(s2.name) 第一个方法 __init__是一种特殊的方法&#x…

HarmonyOS 如何实现传输中的数据加密

文章目录 摘要引言数据传输加密概述选择加密算法和传输协议加密实现方案与 Demo 代码配置 HTTPS/TLSAES 加密的实现代码详解RSA加密的实现代码详解 QA环节总结参考资料 摘要 本文将介绍在 HarmonyOS 应用中如何实现数据传输的加密策略。我们将讨论常见的加密算法&#xff08;如…

Bilibili-超能用户榜入口优化-技术方案反思与总结

目录 客户端实现&#xff1a; 高能用户入口实现逻辑&#xff1a; 接口服务信息&#xff08;服务端下发&#xff09;&#xff1a; 执行方案&#xff1a; (1)数据类新增服务端下发字段 ​编辑 (2) UI添加 寻找思路&#xff1a; &#xff08;3&#xff09;超能用户icon显示…