C++例题:大数运算---字符串相加(使用数字字符串来模拟竖式计算)

1.代码速览

class Solution2
{
public:string addStrings(string num1, string num2){//end1和end1是下标int end1 = num1.size() - 1;int end2 = num2.size() - 1;string str;//下标(指针)从后向前走,走到头才可以结束,所以是end>=0int next = 0;while (end1 >= 0 || end2 >= 0){int x1 = end1 >= 0 ? num1[end1--] - '0' : 0;//'0' = 48int x2 = end2 >= 0 ? num2[end2--] - '0' : 0;int x = x1 + x2 + next;//18          10next = x / 10;//18/10 = 1 进位     1x = x % 10;//18%10 = 8 本位        0//头插//str.insert(0, 1, x + '0');//将数子恢复成字符str += (x + '0');}if (next == 1)//处理头是9+1的情况{/*str.insert(str.begin(), '1');*/str += '1';}reverse(str.begin(), str.end());return str;}
};

2.代码详解

我举一个较为极端的例子来说明此代码的运行逻辑,这个例子也可更全面的概括了几乎所有的情况

"99"+'9':

2.1逐步骤分析

a.以竖式计算的逻辑,绝对是从个位开始相加,即'9'+'9',于是,我们便要想办法定位到这个位子,

于是我们便设置下标end1和end2来定位这两个字符串的最后一位(个位)

在C++的STL中,我们一般使用size()来计算当前容器中字符串的大小,num1.size()-1可以得出下标;

b.因为9+9=18,在竖式计算中,这里的18是需要留8进1的,于是我们便声明一个变量next来储存这个进位,并且将next初始化为0

结合手绘图,我们可以得出结论,在进行竖式计算的过程中,一个数字的得出其实由三个部分的相加组成,是x1+x2+next

c.这两个数字字符串的相加可以,首元素的下标为0,当end1和end2>=0时此循环才可以进行,在进行加法计算的过程中结果的x=x1+x2+next;x1和x2便是下标end1和end2目前所指向的数字,在end1和end2遍历完字符串中所有数字符字后循环方可停止

d.用end1和end2对两个字符串进行遍历

如果这个位置有字符,就将这个字符显示类型转换成int类型的数字

在c语言和C++中,字符实际上是以整数形式存储的,它们的值是它们对应的 ASCII 值,证明过程如下

所以这里使用显式类型转换和字符串(ASCII)相减得出int的整数(就是由字符数字转换成int型的数字)

e.在考虑好将单个位置上的数字相加工作做完以后我们便可以考虑进位数字的求得和本位数字的保留问题了

f.在将它的每个位置取下后将需要保留的位置依次放入字符串中形成新的数字,有两种方法,可以尾插然后使用reverse()倒一下,或者直接头插

这里建议尾插,如果头插那么时间复杂度将会是O(N²),如果尾插后reverse便是O(N);

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

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

相关文章

2024icpc武汉站邀请赛F.Custom-Made Clothes(交互题)

2024 i c p c 武汉站邀请赛 F . C u s t o m − M a d e C l o t h e s \Huge{2024icpc武汉站邀请赛F.Custom-Made Clothes} 2024icpc武汉站邀请赛F.Custom−MadeClothes 文章目录 题意思路标程 题目链接:F. Custom-Made Clothes 题意 本题是一道交互题。 给出一个…

百日训练(第四周 , 第一天)

放了一个五一假期,玩了五天,没有刷任何题,今天做一个恢复训练 洛谷 —— 奶酪 P3958 [NOIP2017 提高组] 奶酪 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 不难发现,这题可以用并查集,那么就有两个问题需要解决 …

拓扑是什么意思

拓扑学,有时候被称为“橡胶片几何学”,它是研究空间形状在连续变形下的性质的数学分支。这种变形包括拉伸、压缩、扭曲,但不包括撕裂或粘合。 一个经典的拓扑问题就是“环面和咖啡杯”的问题。在拓扑学中,一个环面(就…

Swift 周报 第五十期

文章目录 前言新闻和社区WWDC24:6 月 10 日至 14 日 (太平洋时间)苹果“内忧外患”,库克中国求援苹果被起诉!市值一夜蒸发8000亿元 提案通过的提案正在审查的提案拒绝的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主…

unity车辆碰撞检测

在Unity中根据车辆碰撞检测去调度车辆集群行驶可以通过以下方法实现: 添加碰撞检测组件:在每辆车辆上添加Collider组件和Rigidbody组件,以便进行碰撞检测和物理模拟。 设定车辆行驶轨迹:为每辆车辆设定行驶轨迹或目标点&#xff…

八股spring+springboot+springMVC+Mybatis(一)

目录 1、面试官:Spring框架中的单例bean是线程安全的吗? 2、面试官:什么是AOP 3、面试官:你们项目中有没有使用到AOP 4、面试官:Spring中的事务是如何实现的 5、面试官:Spring中事务失效的场景有哪些 6、面…

行业推荐:数据防泄漏软件首先解决方案

随着信息时代的快速发展,数据安全已成为企业经营的关键之一。然而,数据泄漏事件时有发生,不仅可能导致巨大的经济损失,更会损害企业的声誉和客户信任。 为了帮助企业有效地保护数据安全,Ping32 数据防泄漏系统应运而生…

【C++】-QT多线程-006

1【QT】多线程 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget>namespace Ui { class MyWidget; }class MyWidget : public QWidget {Q_OBJECTpublic:explicit MyWidget(QWidget *parent 0);~MyWidget();/* 5 自定义信号*/ /*所有的信号函数只声明不定义&…

SpringSecurity6配置requestMatchers().permitAll() 无效问题

版本 <spring-boot.version>3.0.2</spring-boot.version> <jjwt.version>0.12.5</jjwt.version>问题描述 题主在写 SpringSecurity6 JWT 做登录认证开发。一路跟着教程叭叭的敲。等到接口验证的时候&#xff0c;发现我的登录接口虽然在SecurityConf…

Android 实时监听Activity堆栈变化(系统应用)

private val mIActivityManager: IActivityManager ActivityManagerNative.asInterface(ServiceManager.getService(Context.ACTIVITY_SERVICE)) 方式一&#xff08;registerProcessObserver&#xff09; &#xff1a; mIActivityManager.registerProcessObserver(mIProcess…

JS手写call方法

call方法是JS function中内置的一个方法&#xff0c;主要的作用有两个&#xff1a; 改变函数的this指向向函数中传递参数 使用方式如下&#xff1a; fn.call(obj, 100, 200) 实现代码示例&#xff1a; Function.prototype.myCall function(ctx, ...args) {ctx ctx unde…

【Linux】掌握Linux系统编程中的权限与访问控制

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

电源小白入门学习7——USB充电、供电、电源路径管理

电源小白入门学习7——USB充电、供电、电源路径管理 USB充电系统需要考虑的因素开关充电和线性充电充电路径管理输入限流路径管理&#xff08;动态功率管理&#xff09;理想二极管帮助提高电池利用率输入过充抑制 上期我们介绍了锂离子电池的电池特性&#xff0c;及充电电路设计…

QT--1

类型界面 #include "mywidget.h"myWidget::myWidget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFlag(Qt::FramelessWindowHint);th…

Java项目硅谷课堂后端报错处理

Java项目硅谷课堂后端报错处理总结 前言service_vod报错import javax.servlet.http.HttpServletResponse;找不到java.lang.IllegalStateException gateway报错Failed to configure a DataSourceUnsatisfiedDependencyException: Error creating bean with name gatewayConfigur…

自学是什么?如何学会自学?

如是我闻&#xff1a; 自学是什么&#xff1f; 对自学下一个定义&#xff0c;可以这样说&#xff1a; 自学就是自主的选择学习资源来学习。 而自学的方式&#xff0c;无论是看网课&#xff0c;读教材&#xff0c;做习题&#xff0c; 都是一般的的学习方法。 我们是无法从方…

生成一个好故事!StoryDiffusion:一致自注意力和语义运动预测器必不可少(南开字节)

文章链接&#xff1a;https://arxiv.org/pdf/2405.01434 主页&#xff1a;https://storydiffusion.github.io/ 对于最近基于扩散的生成模型来说&#xff0c;在一系列生成的图像中保持一致的内容&#xff0c;尤其是那些包含主题和复杂细节的图像&#xff0c;是一个重大挑战。本…

Ollama+Open WebUI部署大模型在linux平台

Ollama安装运行 Ollama容器拉取 docker pull ollama/ollamaOllama容器CPU运行 docker run -d --restartalways -v /home/docker/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollamaOllama容器GPU运行 # nvidia-container-runtime-script.shsudo curl -s -L …

网络初始化配置

IPADDR192.168.23.10 #新的ip地址&#xff0c;ip的网段要与nat模式下的网段一致 NETMASK255.255.255.0 #子网掩码 GATEWAY192.168.23.2 #网关 DNS1114.114.114.114 #域名解析&#xff1a;配置为国内114.114.114.114&#xff0c;国外8.8.8.8 ONBOOTtrue 启动时该网卡…

(代码示例)使用crypto-js实现AES加密解密

npm install crypto-js # 官方文档 <https://www.npmjs.com/package/crypto-js>适用于需要检验的场景 比如敏感的前端query参数Cookie中的某个字段数据库中的敏感字段 // 做成文件 const CryptoJS require("crypto-js"); // 秘钥 const aesKey "59a…