高精度加法,模拟大数的加法运算

简介: 在处理特别大的数相加特别大的数的时候,long long不能直接通过加法算出结果的时候,可以通过高精度算法处理这些数的相加具体·思路如下;首先 1 . 这些数存到数组的时候该如何排列,是个位放在第一位还是最后一位放到第一位,由于数的相加的候常常出现进位,常在最后一位加上一个数,而加上数的话往往在数组最后一位加上数比较方便,所以我们把第个位放在数组第一位2.其次在调用模拟大数相加的函数中,我们该如何处理同一位上数相加出现的进位呢,我们可以设置一个 t 存储数组上某位相加最后吧 t%10 ,就可以得到想要的数,同时在 t / 10 如果 t 会的得到 1 或者 0.

在处理特别大的数相加特别大的数的时候,long long不能直接通过加法算出结果的时候,可以通过高精度算法处理这些数的相加具体·思路如下;


首先 1 . 这些数存到数组的时候该如何排列,是个位放在第一位还是最后一位放到第一位,由于数的相加的候常常出现进位,常在最后一位加上一个数,而加上数的话往往在数组最后一位加上数比较方便,所以我们把第个位放在数组第一位


2.其次在调用模拟大数相加的函数中,我们该如何处理同一位上数相加出现的进位呢,我们可以设置一个 t 存储数组上某位相加最后吧  t%10 ,就可以得到想要的数,同时在 t / 10 如果 t 会的得到 1 或者 0.


3.最后如果 t 不等于 0 的话,得到的数最后一位还得加上1


代码如下·(摘自acwing的y总思路)

#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(1);
  return C;
}
int main()
{
    string a,b;
  vector<int> A,B;
  cin >> a >> b;  //a = "123456" 
    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 --)  printf("%d",C[i]); 
}


相关文章
|
1月前
|
存储 C语言
大数的加、减、乘、除、幂运算(C语言)
大数的加、减、乘、除、幂运算(C语言)
|
存储 Java 大数据
|
存储 算法
经典算法之异或运算(无进位相加)
经典算法之异或运算(无进位相加)
261 0
经典算法之异或运算(无进位相加)
大数的四则运算(加,减,乘,除)处理
大数的四则运算(加,减,乘,除)处理
364 0
大数的四则运算(加,减,乘,除)处理
7-2 一元多项式的乘法与加法运算 (20 分)
7-2 一元多项式的乘法与加法运算 (20 分)
117 0
7-41 大数的乘法 (10 分)
7-41 大数的乘法 (10 分)
57 0
7-237 有理数加法 (15 分)
7-237 有理数加法 (15 分)
85 0