文章目录

  • 算法原理
  • 二进制求和
    • 题目链接
    • 题目描述
    • 解题思路
    • 代码
  • 字符串相乘
    • 题目链接
    • 题目描述
    • 解题思路
    • 代码


算法原理

这两道题都是属于算法里一种经典题型:高精度加/减/乘/除法,需要我们模拟加/减/乘/除 列竖式运算。

二进制求和

题目链接

题目链接

题目描述

在这里插入图片描述

解题思路

先创建两个指针分别指向字符串末尾,创建变量t存储每次加法的结果。 首先一个while循环当两个字符串都遍历完并且变量值为0时跳出循环。
我们做加法是从后往前加,所以先创建两个指针分别指向字符串末尾,把指向的值分别加到变量t中,注意这里我们a[end]访问到的是字符’0’或’1’的ascll码值,所以它还要减去’0’。
加完后不要忘记end–。
得到的值t还要模2才能把值+=到字符串中,因为二进制加法逢二进一,注意还要把得到的值加’0‘得到字符1的ASCII码值,因为我们需要加的是字符1,再把t除二赋给t当作进位参与下一次加法运算。
因为s一直的尾插,所以最后还要把s逆置一下得到结果。

代码

class Solution {
public:string addBinary(string a, string b) {string s;int end1 = a.size() - 1;int end2 = b.size() - 1;int t = 0;while (end1 >= 0 || end2 >= 0 || t){if(end1 >= 0)t += a[end1--] - '0';if(end2 >= 0)t += b[end2--] - '0';s += t % 2 + '0';t = t / 2;}reverse(s.begin(), s.end());return s;}
};

字符串相乘

题目链接

题目链接

题目描述

在这里插入图片描述

解题思路

在这里插入图片描述

这道题解法是我们依次相乘后的结果先不进位,乘完后一起相加得到结果后再进位,在加之前进位和加之后进位最后得到的结果是一样的,无进位相乘再相加代码编写会更便捷。
步骤一
先将原始字符字符串逆序,因为我们要将字符串数据相乘得到的数据存放到整型数组
vector中,逆序两个字符串下标相加正好就和要存放位置的vector的下标对应。
步骤二
两层for循环搞定无进位相加,我们要开一个动态数组vector来存放无进位相加的结果,动态数组大小为m + n -1,这里我们考虑极限情况,下面999*999得到的结果也只是五个数,所以用m + n - 1来存是完全足够的,下标的对应关系和我们之前分析的一样。
这里还要特别注意因为题目的num1和num2是string对象,所以里面存的数据类型的char,也就是数字对应的ASCII码值,所以[]取到的值还要减去字符0对应的 ASCII码值。

在这里插入图片描述

步骤三
这里就需要处理无进位相加的结果,这里思路和我们上一题二进制相加很类似,定义一个cur记录vector下标,定义一个t记录处理进位后的结果,这里也要注意把t尾插到string里要先加’0’。
步骤四
这里是乘法,所以要比上一题多一个步骤,处理前导零。如果两个乘数有其中一个为0那么结果就为单独一个0,处理前导零之前有可能有多个0,具体几个0取决于m+n-1的结果,那么就需要将多余的0删除。
最后再将string逆置,就得到结果啦。

代码

class Solution {
public:string multiply(string n1, string n2) {//1、准备工作reverse(n1.begin(),n1.end());reverse(n2.begin(),n2.end());size_t m = n1.size();size_t n = n2.size();//2、无进位相加vector<int> v(m + n - 1);for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){//字符ASCII码转换成数字v[i + j] += (n1[i] - '0') * (n2[j] - '0');}}//3、处理进位size_t cur = 0, t = 0;string ret;while(cur < m + n - 1 || t != 0){//避免越界if(cur < m + n - 1)t += v[cur++];//数字转换成ASCII码ret += (t % 10) + '0';t = t / 10;}//4、处理前导零while(ret.size() > 1 && ret.back() == '0')ret.pop_back();reverse(ret.begin(), ret.end());return ret;}
};

以上就是小编分享的全部内容了,如果觉得不错还请留下免费的关注和收藏
如果有建议欢迎通过评论区或私信留言,感谢您的大力支持。
一键三连好运连连哦~~

在这里插入图片描述

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

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

相关文章

MongoDB:索引

目录 1、索引数据结构&#xff1a;B-树 2、索引类型 2.1 单字段索引 2.2 复合索引&#xff08;最重要&#xff01;&#xff09; 2.3 多键索引&#xff08;数组字段&#xff09; 2.4 地理空间索引 2.5 全文索引 2.6 哈希索引&#xff08;分片专用&#xff09; 2.7 TTL …

【大模型】Transformer架构完全解读:从“盲人摸象“到“通晓万物“的AI进化论

&#x1f916; Transformer架构完全解读&#xff1a;从"盲人摸象"到"通晓万物"的AI进化论 —— 一位大模型探索者的技术日记 ☕ 第一章&#xff1a;为什么说Transformer是AI界的"蒸汽机革命"&#xff1f; 1.1 从RNN到Transformer&#xff1a;…

JavaEE:使用JMeter进行接口并发测试

一、下载与安装&#xff1a; 1.下载apache-jmeter-5.6.3.zip&#xff1a; https://jmeter.apache.org/download_jmeter.cgi 2.解压到D:\Program Files\apache-jmeter-5.6.3目录 3.添加JDK环境配置到D:\Program Files\apache-jmeter-5.6.3\bin\jmeter.bat文件开头&#xff1…

【笔记】MSYS2 的 MinGW64 环境中正确安装 Python 相关环境管理工具 (Poetry、Virtualenv、Pipenv 和 UV)

MSYS2 环境配置与 Python 项目依赖管理笔记_msys更新python-CSDN博客 【技术笔记】MSYS2 指定 Python 版本安装方案_pacman -u 安装指定版本-CSDN博客 更多关于 MSYS2 开发环境的配置&#xff0c;请查看往期笔记。 简介 本笔记将记录我们在 MSYS2 的 MinGW64 环境中安装 Pytho…

ubuntu添加域名解析服务器地址

在 Ubuntu 中配置域名解析主要有两种方式&#xff1a;静态修改 /etc/hosts 文件 和 动态修改 DNS 解析服务器配置。以下是详细操作指南&#xff1a; 建议优选:二、永久方案&#xff1a;修改 DNS 解析服务&#xff08;推荐&#xff09;中的方法1 一、临时方案&#xff1a;修改…

通过 AIOps 、生成式 AI 和机器学习实现更智能的可观测性

支持 AIOps 的理由 人工智能运维&#xff08;AIOps&#xff09;是将人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和分析技术应用于提升 IT 运维团队日常工作的过程。简单来说&#xff0c;AIOps 是软件系统通过 AI 和 ML 以及相关分析技术来简化和…

【DataWhale组队学习】AI办公实践与应用

AI办公-PPT制作 1. 使用大模型制作PPT的常见流程 使用大模型生成PPT的文稿将文稿的内容喂给可以直接生成PPT的大模型&#xff0c;生成PPT 2. 使用大模型生成PPT文稿 我们可以先使用上一章提过的那些大模型去生成一个PPT的文稿。那根据上一章的内容&#xff0c;我们想要去让…

人机融合智能 | 人智交互中的机器行为设计与管理

以人工智能为代表的科学技术正在深入地塑造和改变着人类的社会、文化和经济等,在“无所不在的算法与智能”的时代,了解智能机器的行为对于设计智能行为并使其造福于人类,对于智能机器的设计者、开发者和使用者,都具有重要意义。机器行为研究从学科交叉的视角,将智能机器行为置于…

langChainv0.3学习笔记(高级篇)

目录 工具创建工具从函数创建工具tool 装饰器结构化工具 从可运行对象创建工具子类化 BaseTool如何创建异步工具处理工具错误返回工具执行的artifact 使用内置工具和工具包自定义默认工具如何使用内置工具包 使用聊天模型调用工具定义工具模式Python 函数LangChain 工具Pydanti…

UiAutomator2 与 Appium 对比分析:安卓自动化测试框架的选择指南

目录 一、基础介绍UiAutomator2Appium 二、功能对比三、架构差异UiAutomator2 架构简图&#xff1a;Appium 架构简图&#xff1a; 四、使用场景分析五、优缺点总结UiAutomator2 优点&#xff1a;UiAutomator2 缺点&#xff1a;Appium 优点&#xff1a;Appium 缺点&#xff1a; …

缺失的第一个正整数

继续每日一题 今天给大家带来一道将数组视为哈希表的算法 题目描述&#xff1a; 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 题目示例&#xff1a; 由于题目要求…

单例模式-Python示例

单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中一种创建型模式&#xff0c;广泛应用于软件开发中。一以下以故事化的方式&#xff0c;结合详细的技术讲解&#xff0c;介绍单例模式的背景、定义、适用场景&#xff0c;并提供python的示例代码。 故事…

啥是 SaaS

https://www.youtube.com/watch?vnpcL7oRZQlI这个视频讲了什么东西&#xff0c; 什么 idea?好的&#xff0c;这个视频内容非常棒&#xff0c;信息量很足。下面为你详细总结视频讲了什么&#xff0c;以及核心的 Idea 是什么。 视频核心 Idea 这个视频讲的是一位名叫 Leandro…

Spring Boot 工程启动以后,我希望将数据库中已有的固定内容,打入到 Redis 缓存中,请问如何处理?

在 Spring Boot 工程中&#xff0c;将数据库中的固定内容预先加载到 Redis 缓存中可以通过以下步骤实现。这里假设你已经配置好了 Spring Data Redis 和数据库&#xff08;如 MySQL&#xff09;的连接。 1. 添加依赖 首先&#xff0c;确保你的 pom.xml&#xff08;Maven&…

springboot企业级项目开发之项目测试——集成测试!

集成测试 集成测试是指项目代码在单元测试完成后进行的第二阶段测试。集成测试的重点是在集成组件或单元之间交互时暴露缺陷&#xff0c;以保证不同模块之间相互调用的正确性。在Spring Boot的项目集成测试中&#xff0c;将测试Controller和Dao的完整请求处理。应用程序在服务…

HTML 媒体(Media)

HTML 媒体&#xff08;Media&#xff09; 引言 HTML 媒体元素是构成现代网页的重要组成部分&#xff0c;它允许我们在网页中嵌入各种类型的媒体内容&#xff0c;如音频、视频、图像等。这些元素不仅丰富了网页的视觉效果&#xff0c;还提升了用户体验。本文将详细介绍 HTML 媒…

轻量化分布式AGI架构:基于区块链构建终端神经元节点的互联网智脑

一、架构概述 该架构通过将终端设备&#xff08;如手机、IoT设备&#xff09;转化为神经元节点&#xff0c;结合区块链技术构建去中心化智能网络&#xff0c;形成“互联网智脑”。其核心在于突破传统AGI算力瓶颈&#xff0c;实现数据安全共享与价值分配。 1.1 关键特征 分布…

【知识图谱构建系列6】:借了张显卡先跑着

文章目录 前情提要mistral模型运行代码前情提要 之前咱对LLM4KGC的代码稍作修改,目标是用modelscope来下载模型。 现在这个代码终于能跑了。 前面咱说,我们的显卡只有6G的显存。现在呢,我也成功借到了A100的显卡。这下,咱可以先跑跑这个项目默认带的mistral模型。 mist…

从零开始手写redis(16)实现渐进式 rehash map

手写 Redis 系列 java从零手写实现redis&#xff08;一&#xff09;如何实现固定大小的缓存&#xff1f; java从零手写实现redis&#xff08;三&#xff09;redis expire 过期原理 java从零手写实现redis&#xff08;三&#xff09;内存数据如何重启不丢失&#xff1f; jav…

List、Queue、Deque、Stack常用方法总结

Java 中几个常见的线性数据结构的 方法总结与对比&#xff0c;包括&#xff1a; List&#xff08;ArrayList、LinkedList&#xff09;Queue&#xff08;LinkedList、PriorityQueue&#xff09;Deque&#xff08;ArrayDeque、LinkedList&#xff09;Stack&#xff08;传统 Stac…