大数加法【算法解析、代码模板、思路简单清晰】

news/2025/2/9 5:02:09/

791. 高精度加法 - AcWing题库

算法解析

大数加法其实本质上就是模拟 小学我们学的加法运算 + 分治 的思想

我们将一个很大的数字,拆成一个数的加法——分治思想

如何存储

如果对于一个真正很大的数字来说,可能long long都不支持(最多支持19位数

但是一般来说大数都是1000位起步的,所以我们不能简单的使用long long进行处理,而是将其放在一个数组内,然后通过将每一位拆分出来,进行相加。

存放顺序

因为加法中设计到 进位 问题,所以我们需要首先计算个位数的

当然,也可以换一个角度进行考虑。因为我们是使用数组存储的,若将相加的结果放在前面的话,那么每计算一次都需要将后面的内容往后移一位空出第一位

代码模板

#include<iostream>
#include<vector>using namespace std ;string a , b ;vector<int> add(vector<int> &A , vector<int>& B){vector<int> C;int carry = 0;for(int i = 0 ; i < A.size() || i < B.size() ; i ++){if(i < A.size()) carry += A[i];if(i < B.size()) carry += B[i];C.push_back(carry % 10);carry /= 10;}if(carry != 0){C.push_back(carry );}return C;}int main(){vector<int >A , B;cin >> a >> b;for(int i = a.size() - 1 ; i >= 0 ; i -- ) A.push_back(a[i] - '0');for(int i = b.size() - 1 ; i >= 0 ; i -- ) B.push_back(b[i] - '0');auto C = add(A , B );for(int i = C.size() - 1 ; i >=  0 ;  i --){cout << C[i];}return 0;
}

代码模板中我们采用的是vector其实本质上就是一个数组,但是它比较方便的是可以直接通过push_back添加数字进入数组的。

比较妙的一点

在函数add中,定义一个变量carry。判断当前是否需要添加A数组B数组,这里需要明白的一点就是,若是数字的位数不对(如199 + 1),那么将不会遍历内容为1的数组B

完成相加后,直接将carry变量 % 10 后直接放入C中

因为在前面我们是倒序输入的,这里我们顺序输入C,那么最后我们需要将倒序输出正确结果


http://www.ppmy.cn/news/35276.html

相关文章

Nginx入门讲解

Nginx入门讲解 Nginx Web服务介绍 nginx是个高性能的http和反向代理服务器&#xff1a; IMAP/POP3/SMTP服务器nginx性能稳定、性能强大、非常节约系统资源Nginx是高性能、轻量级的服务器&#xff1b;越来越多的企业使用nginx来代替Apache&#xff1b; nginx使用越来越广泛&…

JNI原理及常用方法概述

1.1 JNI(Java Native Interface) 提供一种Java字节码调用C/C的解决方案&#xff0c;JNI描述的是一种技术。 1.2 NDK(Native Development Kit) Android NDK 是一组允许您将 C 或 C&#xff08;“原生代码”&#xff09;嵌入到 Android 应用中的工具&#xff0c;NDK描述的是工具集…

文本三剑客之sed编辑器

文本三剑客&#xff1a;都是按行读取后处理。 grep 过滤行内容。awk 过滤字段。sed 过滤行内容&#xff1b;修改行内容。sed编辑器 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中…

C语言数据结构初阶(8)----栈与队列OJ题

CSDN的uu们&#xff0c;大家好。这里是C语言数据结构的第八讲。 目标&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;数据结构与算法栈与队列的知识点我➡➡队列相关点我➡➡栈相关2. 用栈实现队列原题链接…

【C/C++】程序的内存开辟

在C/C语言中&#xff0c;不同的类型开辟的空间区域都是不一样的. 这节我们就简单了解下开辟不同的类型内存所存放的区域在哪里. 文章目录栈区&#xff08;stack&#xff09;堆区&#xff08;heap&#xff09;数据段&#xff08;静态区&#xff09;常量存储区内存开辟布局图栈区…

C/C++中for语句循环用法及练习

目录 语法 下面是 for 循环的控制流&#xff1a; 实例 基于范围的for循环(C11) 随堂笔记&#xff01; C语言训练-计算1~N之间所有奇数之和 题目描述 输入格式 输出格式 样例输入 样例输出 环形方阵 干货直达 for 循环允许您编写一个执行特定次数的循环的重复控制结构。…

JVM知识整理

JVM知识整理 JVM的主要组成部分 JVM包含两个两个子系统&#xff08;类加载子系统和执行引擎&#xff09;和两个组件&#xff08;运行时数据区与和本地库接口&#xff09; 类加载子系统&#xff1a;根据给定的全限定类名来加载class文件到运行时数据区域中的方法区。执行引擎&a…

【C++】科普:C++中的浮点数怎么在计算机中表示?

这里我们以8.25这个数为例说明计算机时如何存取float类型的数据的&#xff1a; float a 8.25;引言 1. 所占位数 首先&#xff0c;明确一个概念&#xff0c;float类型的数据在常规计算机中通常占4个字节&#xff0c;也就是32位。其内存分布如图&#xff1a; 位字段说明所占位…