在有时一个很长的数字C++中的数据类型难以表示的时候,就需要我们以数组的方式来存储内个长数字中每位的数字。
一、高精度加法
因为太长的整数无法按照常规使用一个数据类型来表示,使用两个数组分别存储两个数字,然后进行相加。
加法中需要注意的是进位,例题解释代码中的
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');
可能会有疑问为什么要给A,B中加的是a中字符的值减去0 。
其实是这样的使用字符串中第i个字符的ASCII码值减去0的ASCII码值,相减后的差值刚好就是第i个字符本来要表示的数字。
例题:https://www.acwing.com/activity/content/problem/content/825/
#include<iostream>
#include<vector>
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() - 1 || i <= B.size() - 1; i++)
{
if (i <= A.size() - 1) t += A[i];
if (i <= B.size() - 1) t += B[i];
C.push_back(t % 10);
t /= 10;
}
//注意最高位的进位
if (t)
C.push_back(1);
return C;
}
int main()
{
string a, b;
cin >> a >> b; //a=121345
//容器存放两个长整数
vector<int> 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--)
printf("%d", C[i]);
return 0;
}