高精度加减法模板
这一部分来自于AcWing算法基础课中高精度加减法模板的重新实现,使用C++进行编程,与y总给出的模板基本一致。
亮点在于使用C++的vector来对大整数进行存储,在本科阶段的C语言课程中,通常使用char数组来对大整数进行保存并直接参与运算,后者较难理解。
高精度加法
cpp
#include <vector>
#include <string>
#include <iostream>
using namespace std;
string a, b;
vector<int> A, B;
vector<int> add(vector<int> &A, vector<int> &B) {
int t = 0;
vector<int> C;
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()
{
ios::sync_with_stdio(false);
cin.tie(0);
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;
}
高精度减法
cpp
#include <vector>
#include <string>
#include <iostream>
using namespace std;
string a, b;
vector<int> A, B;
vector<int> sub(vector<int> &A, vector<int> &B) {
vector<int> C;
for(int i=0, t=0; i<A.size(); i++){
t = A[i] - t;
if(i < B.size()) {
t -= B[i];
}
C.push_back((t+10)%10);
if(t < 0) t = 1;
else t = 0;
}
while(C[C.size()-1] == 0 && C.size() > 1) C.pop_back();
return C;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> a >> b;
bool swap_flag = false;
if((a.length() > b.length()) || (a.length() == b.length() && a > b)) {
swap(a, b);
swap_flag = true;
}
for(int i=a.length()-1; i>=0; i--) A.push_back(a[i] - '0');
for(int i=b.length()-1; i>=0; i--) B.push_back(b[i] - '0');
auto C = sub(B, A);
if(swap_flag && C.size() != 0 && C[C.size()-1] != 0) cout << "-";
for(int i=C.size()-1; i>=0; i--) cout << C[i];
return 0;
}