【C++算法图解专栏】一篇文章带你掌握高精度加减乘除运算

简介: 【C++算法图解专栏】一篇文章带你掌握高精度加减乘除运算

高精度

C++ 本身自带的数字类型无法解决特别大的数的运算,会出现溢出的情况,这时候我们就需要一些算法来模拟大数的运算过程,从而得到最终的结果。


接下来我将带领大家学会高精度的加减乘除运算,这样以后再遇到类似问题就不用再怕啦!


高精度加法

前提条件:给定两个正整数(不含前导0)


不知道大家是否记得小学学的加法运算,把需要运算的两个数列出来,运算过程中可能会出现进位的情况,举个例子,我们来计算一下 48673 和 93146 的和:

动手计算其实很简单,但是如果要用程序实现出来就有点难了,直接上步骤:


1.首先我们在输入时就不能用整型类型输入,而是用字符串类型。

2.然后将字符串中的字符转换成数字传入数组当中( vector 作为数组),这样我们就得到了两个数组 A 和 B,注意我们传入数组时,不能按照字符串下标从低到高的顺序传入,而是反过来,将数字的最低位放到数组中下标的最低位,还是拿上面的那个例子举例。




3.然后开始模拟两个数的加法运算,这里我们需要用到一个附加位 t 来记录每一位上的和,从而解决进位的问题,并且用一个新的数组 C 来接收计算结果,还是上面的例子。



可以发现,第一位上的和没有大于 10,所以直接将 t 加入数组 C 中,接下来继续看大于 10 的情况。



这时候我们将 t%10 的结果放入 C 中,然后执行 t/10 并保留至下一次计算,可以发现这样就模拟了进位操作,我们再看下一位,由于 t/10=1 ,故这次计算需要加上这个 1 即 6+1+1=8 ,并放入 C 当中。



第四位运算同理。



最后一位需要额外注意一下,如果运算已经结束,如果 t 不为 0,则需要加到数组后面。



4.最后,我们再将数组 C 倒着输出一遍就得到了最终的运算结果。

#include <bits/stdc++.h>
using namespace std;
//高精度加法
vector<int> Add(vector<int>& A, vector<int>& B) {
  vector <int> C;
  int t = 0;
  for (int i = 0; i < A.size() || i < B.size(); i++)
  {
    if (i < A.size()) t += A[i];
    if (i < B.size()) t += B[i];
    C.push_back(t % 10);
    t /= 10;
  }
  if (t)   C.push_back(t);  //加上最高位的进位
  return C;
}
int main() {
  string a, b;
  vector<int> A;
  vector<int> 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');
  }
  vector<int> C = Add(A, B);
  for (int i = C.size() - 1; i >= 0; i--) {
    cout << C[i];
  }
}
目录
相关文章
|
2月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
671 0
高精度算法(加、减、乘、除,使用c++实现)
|
2月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
45 0
|
2月前
|
存储 算法 决策智能
【算法】博弈论(C/C++)
【算法】博弈论(C/C++)
|
2月前
|
存储 算法 C++
【算法】哈希映射(C/C++)
【算法】哈希映射(C/C++)
|
2月前
|
机器学习/深度学习 人工智能 算法
【算法】最长公共子序列(C/C++)
【算法】最长公共子序列(C/C++)
|
2月前
|
人工智能 算法 BI
一篇带你速通差分算法(C/C++)
一篇带你速通差分算法(C/C++)
|
2月前
|
人工智能 算法 C++
一篇带你速通前缀和算法(C/C++)
一篇带你速通前缀和算法(C/C++)
|
2月前
|
存储 算法 C++
弗洛伊德(Floyd)算法(C/C++)
弗洛伊德(Floyd)算法(C/C++)
|
2月前
|
存储 算法 程序员
迪杰斯特拉(Dijkstra)算法(C/C++)
迪杰斯特拉(Dijkstra)算法(C/C++)
|
2月前
|
算法 C++
【算法解题思想】动态规划+深度优先搜索(C/C++)
【算法解题思想】动态规划+深度优先搜索(C/C++)