高精度加法
作者:
sweet_tea
,
2022-07-31 20:54:03
,
所有人可见
,
阅读 112
将加数与被加数存储在数组A、B中
模拟人工加法的过程,结果使用数组C存储
方法一:同位相加同时进位存余
vector<int> add(vector<int> &A, vector<int> &B)
{
if (A.size() < B.size()) return add(B, A);
vector<int> C;
int t = 0;
for (int i = 0; i < A.size(); i ++ )
{
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;
}
vector<int> add(vector<int> &A, vector<int> &B)
{
if (A.size() < B.size()) return add(B, A);
vector<int> C;
C.push_back(0);
for (int i = 0; i < A.size(); i ++ )
{
C.push_back(0);
if (i < B.size()) C[i] = A[i] + B[i] + C[i];
else C[i] = A[i] + C[i];
C[i + 1] = C[i] / 10;
C[i] %= 10;
}
if (!C.back()) C.pop_back();
return C;
}
方法二:先同位相加,再进位存余
vector<int> add(vector<int> &A, vector<int> &B)
{
if (A.size() < B.size()) return add(B, A);
vector<int> C;
int t = 0;
for (int i = 0; i < A.size(); i ++ )
{
if (i < B.size()) t = A[i] + B[i];
else t = A[i];
C.push_back(t);
}
C.push_back(0);
for (int i = 0; i < A.size(); i ++ )
{
C[i + 1] += C[i] / 10;
C[i] %= 10;
}
if(!C.back()) C.pop_back();
return C;
}