高精度(非负数的加减乘除)
高精度的几种情况:
A + B, A - B, A * b, A / b;
其中数据范围一般为A,B <= len(1e6), b <= 1e4。
1.高精度加法:
题目791:
给定两个非负整数,计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤100000
输入样例:
12
23
输出样例:
35
#include<iostream>
#include<vector>
using namespace std;
//R = M - N,满足M >= 0, N >= 0
vector<int> add(vector<int> &M, vector<int> &N){
//采用引用,防止拷贝
vector<int> C;
int t = 0; //t代表进位,只能取0或1
//M与N每位进行相加,直至两者相加完。t为最高位相加后的进位,为1则加入C
for(int i = 0; i < M.size() || i < N.size() || t; ++i){
if( i < M.size()) t += M[i];
if( i < N.size()) t += N[i]; //此时t表示M和N的第i位相加的和
C.push_back(t % 10);
t /= 10; //更新t,使其保持为进位
}
return C;
}
int main(){
string a, b;
cin >> a >> b;
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(