【practise】大数相加、大数相乘

通常,我们的int、long long类型都有最大的数字上限,也就是说再大了会有溢出问题,那么很大的数字是怎么进行运算的呢?

其中一种方法是把很大的数字转变成字符串存放到string中,然后用代码对字符串进行处理,模拟运算的过程来计算出结果的,下面介绍两道关于这方面的典型例题。

1.大数相加

大数相加练习题:LINK
在这里插入图片描述
是这道题目该如何去解答呢???

思路:模拟我们算加法的顺序

  1. 先取每个字符串的最后一个字符
  2. 将字符转变为数字
  3. 然后运算
  4. 然后写到新的字符串上去,如此循环
    图解过程:
    在这里插入图片描述

实际上,这很像我们小学时候手算两个数相加的过程。
于是,我们就可以按照这个思路写出下面这种代码了:

class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1, end2 = num2.size() - 1;int r1 = 0, r2 = 0;string retstr;int next = 0;int ret = 0;while(end1 >= 0 || end2 >= 0){if(end1 >= 0){r1 = num1[end1] - '0';}else{r1 = 0;}// r1 = end1 >= 0 ? num1[end1] = '0' : 0;if(end2 >= 0){r2 = num2[end2] - '0';}else{r2 = 0;}//r2 = end2 >= 0 ? num2[end2] = '0' : 0;ret = (r1 + r2 + next) % 10;next = (r1 + r2 + next) / 10;retstr.push_back(ret + '0');end1--, end2--;}if(next == 1){retstr.push_back('1');}reverse(retstr.begin(), retstr.end());return retstr;}
};

上面是一种性能优化代码,按照逻辑,我们每次算出的数字都需要头插的,但是头插的效率比较低,所以换成了尾插,这样到最后颠倒一下字符串的整体顺序就可以了。

2.大数相乘

与之相对的一道题目:大数相乘。
题目链接:LINK
在这里插入图片描述
思路:模拟乘法计算过程
乘法计算操作数只有两个,我们可以看作一个是被乘数另一个是乘数,我们只需要依次取乘数的每个数字与被乘数相乘,然后对每个数字与被乘数相乘的结果加起来就可以得出最终的结果。
在这里插入图片描述

class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1, end2 = num2.size() - 1;int r1 = 0, r2 = 0;string retstr;int next = 0;int ret = 0;while (end1 >= 0 || end2 >= 0){r1 = end1 >= 0 ? num1[end1] - '0' : 0;r2 = end2 >= 0 ? num2[end2] - '0' : 0;ret = (r1 + r2 + next) % 10;next = (r1 + r2 + next) / 10;retstr.push_back(ret + '0');end1--, end2--;}if (next == 1){retstr.push_back('1');}reverse(retstr.begin(), retstr.end());return retstr;}string multiply(string num1, string num2) {// 1.特殊情况,乘数有0的情况if (num1 == "0" || num2 == "0"){return "0";}string ret = "0";// 2.一般情况,需要一边乘,一边加for (int i = num2.size() - 1; i >= 0; i--){// 存储单个字符与一串字符相乘的结果string mr;// 补零操作for (int j = num2.size() - 1; j > i; j--){mr.push_back('0');}// 拿到乘数的单个字符,并转换为数字int y = num2[i] - '0';// 依次拿到被乘数的字符,并做乘法运算int end1 = num1.size() - 1;int next = 0;while (end1 >= 0){int x = num1[end1] - '0';int r = x * y + next;mr.push_back(r % 10 + '0');next = r / 10;end1--;}if (next != 0){mr.push_back(next + '0');}// 逆转reverse(mr.begin(), mr.end());// 加值ret = addStrings(ret, mr);}return ret;}
};

好的,这两道题虽然不难但是比较有意思,可以自己写一下,当然有问题直接看力扣的题解也可以,两个题目的题解写的都很详细,还配有图片,很完美。


EOF

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

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

相关文章

进程通信(7):互斥锁(mutex)和条件变量

互斥锁(mutex)用于互斥访问临界区,只允许一个线程访问共享变量。 条件变量可以让获取互斥锁 的线程在某个条件变量上等待,直到有其他线程把他唤醒。 互斥锁和条件变量通常一起使用实现同步。 互斥锁的操作 lock(mutex); // 获取锁&#xff…

C++——哈希结构

1.unordered系列关联式容器 本节主要介绍unordered_map和unordered_set两个容器&#xff0c;底层使用哈希实现的 unordered_map 1.unordered_map是储存<key,value>键值对的关联式容器&#xff0c;其允许通过key快速查找到对应的value&#xff0c;和map非常相似&#x…

数学建模--支持向量机

目录 SVM的基本原理 SVM的应用场景 实现细节与案例分析 总结 支持向量机&#xff08;SVM&#xff09;在处理非线性数据时的核函数有哪些&#xff0c;以及它们各自的优缺点是什么&#xff1f; 如何选择支持向量机的惩罚参数CC以优化模型性能和计算效率&#xff1f; 在实际…

V.PS澳大利亚VPS测评

V.PS的澳大利亚VPS位于澳大利亚悉尼市&#xff0c;回程三网强制是走的联通AS9929/CUII链路&#xff0c;是一种轻负载企业级回国路由...而且IP解锁能搞定奈飞、迪士尼、steam、chatgpt等&#xff0c;大洋洲流媒体解锁&#xff0c;尤其是澳大利亚的流媒体&#xff0c;比如澳大利亚…

C语言程序设计-[1] 基础语法

1、字符集 字符集&#xff1a;是ASCII字符集的一个子集。 注&#xff1a;基本上就是电脑键盘可以输入的一些字符。 2、标识符 标识符&#xff1a;用来命名程序中的一些实体&#xff0c;如&#xff1a;变量、常量、函数、数组名、类型名、文件名等。由一个或多个字符组成。 —…

59.DevecoStudio项目引入不同目录的文件进行函数调用

59.DevecoStudio ArkUI项目引入不同目录的文件进行函数调用 arkUi,ets,cj文件&#xff0c;ts文件的引用 import common from ohos.app.ability.common; import stringutils from ./uint8array2string; //index.ts的当前目录 import StringUtils2 from ../http2/uint8array2st…

DETR论文详解

文章目录 前言一、DETR理论二、模型架构1. CNN2. Transformer3. FFN 三、损失函数四、代码实现总结 前言 DETR是Facebook团队在2020年提出的一篇论文&#xff0c;名字叫做《End-to-End Object Detection with Transformers》端到端的基于Transformers的目标检测&#xff0c;DET…

Java重修笔记 第二十七天 匿名内部类

匿名内部类 1. 定义&#xff1a;无类名&#xff08;底层自动分配类名“外部类名$1”&#xff09;&#xff0c;既是类也是对象&#xff0c;定义在外部类的局部位置&#xff0c;例如方法体和代码块中&#xff0c;通过new类或接口并在大括号里重写方法来实现。 2. 使用场景&…

c++网络编程实战——开发基于协议的文件传输模块(一)如何实现一个简单的tcp长连接

前言 在之前的几篇内容中我们已经介绍过基于ftp协议的文件传输模块&#xff0c;而这个系列我们所想实现的就是如何实现基于tcp进行的文件传输模块,话不多说&#xff0c;开坑开坑! 什么是tcp长连接 我们知道tcp在建立连接的时候会通过三次握手与四次挥手来建立tcp连接&#x…

大数据-62 Kafka 高级特性 主题 kafka-topics相关操作参数 KafkaAdminClient 偏移量管理

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

类加载机制

概述 所谓机制就是某种流程规范或运作模式。简单来说&#xff0c;将类文件加载到JVM中的过程&#xff0c;需要对这个过程进行限定和约束&#xff0c;这就是Java类加载的机制。 具体说来&#xff0c;对Java类加载机制的描述可以从三个方面&#xff1a; 按需加载 需要某一个类…

Web开发-html篇-上

HTML发展史 HTML的历史可以追溯到20世纪90年代初。当时&#xff0c;互联网尚处于起步阶段&#xff0c;Web浏览器也刚刚问世。HTML的创建者是蒂姆伯纳斯-李&#xff08;Tim Berners-Lee&#xff09;&#xff0c;他在1991年首次提出了HTML的概念。HTML的初衷是为了方便不同计算机…

python常用库

目录 tqdm库介绍用法 argparse库介绍用法 tqdm库 介绍 封装一个可视化&#xff0c;可拓展的进度条&#xff0c;以了解项目运行的时长&#xff0c;了解项目进展情况。 传入第 用法 安装 pip install tqdm1直接使用 for i in tqdm(range(1000)):time.sleep(0.01)等价 for i…

DNS处理模块 dnspython

DNS处理模块 dnspython 标题介绍安装dnspython 模块常用方法介绍实践&#xff1a;DNS域名轮询业务监控 标题介绍 Dnspython 是 Python 的 DNS 工具包。它可用于查询、区域传输、动态更新、名称服务器测试和许多其他事情。 dnspython 模块提供了大量的 DNS 处理方法&#xff0c…

django集成pytest进行自动化单元测试实战

文章目录 一、引入pytest相关的包二、配置pytest1、将django的配置区分测试环境、开发环境和生产环境2、配置pytest 三、编写测试用例1、业务测试2、接口测试 四、进行测试 在Django项目中集成Pytest进行单元测试可以提高测试的灵活性和效率&#xff0c;相比于Django自带的测试…

PyQt5入门

Python中经常使用的GUI控件集有PyQt、Tkinter、wxPython、Kivy、PyGUI和Libavg。其中PyQt是Qt(c语言实现的)为Python专门提供的扩展 PyQt是一套Python的GUI开发框架,即图形用户界面开发框架.。而在Python中则使用PyQt这一工具包&#xff08;PyQt5、PyQt5-tools、PyQt5-stubs&am…

卡码网--数组篇(二分法)

系列文章目录 文章目录 系列文章目录前言数组二分查找 前言 详情看&#xff1a;https://programmercarl.com/ 总结知识点用于复习 数组 概念: 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标对应的数据。 特点&#xff1a;…

安卓基本布局(下)

TableLayout 常用属性描述collapseColumns设置需要被隐藏的列的列号。shrinkColumns设置允许被伸缩的列的列号。stretchColumns设置允许被拉伸的列的列号。 <TableLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/TableL…

状体管理-装饰器

State 自己的状态 注意:不是状态变量的所有更改都会引起刷新。只有可以被框架观察到的修改才会引起UI刷新。 1、boolean、string、number类型时&#xff0c;可以观察到数值的变化。 2、class或者Object时&#xff0c;可以观察 自身的赋值 的变化&#xff0c;第一层属性赋值的变…

CC++:贪吃蛇小游戏教程

❀创作不易&#xff0c;关注作者不迷路❀&#x1f600;&#x1f600; 目录 &#x1f600;贪吃蛇简介 &#x1f603;贪吃蛇的实现 &#x1f40d;生成地图 &#x1f40d;生成蛇模块 ❀定义蛇的结构体 ❀初始化蛇的相关信息 ❀初始化食物的相关信息 &#x1f40d;光标定位和…