目录
1.大整数加减问题
1.1大整数相加
采用数组存储,并且在数组中:高位在前,低位在后。
vector<int> add(vector<int>nums1, vector<int>nums2) {
vector<int> C;
int t = 0;
for (int i = 0; i < nums1.size() || i < nums2.size(); i++) {
if (i < nums1.size()) t += nums1[nums1.size() - i - 1];
if (i < nums2.size()) t += nums2[nums2.size() - i - 1];
C.insert(C.begin(),(t % 10));
t /= 10;
}
if(t)C.insert(C.begin(), t);
return C;
}
1.2大整数相减
//默认num1 数更大
vector<int> sub(vector<int>nums1, vector<int>nums2) {
vector<int> C;
int t = 0;
for (int i = 0; i < nums1.size() || i < nums2.size(); i++) {
t = nums1[nums1.size() - i - 1] - t;
if (i < nums2.size()) t -= nums2[nums2.size() - i - 1];
C.insert(C.begin(), (t + 10) % 10);
if (t < 0)t = 1;
else t = 0;
}
return C;
}
2.前缀和
2.1一维前缀和
S[i] = a[1] + a[2] + ... a[i]
a[l] + ... + a[r] = S[r] - S[l - 1]
2.2 二维前缀和
S[i, j] = 第i行j列格子左上部分所有元素的和
以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:
S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]
3.差分问题
3.1一维差分
a[i]是b[i]的前缀和,当要求a【l】-a[r]之间的所有数加上c时,可用以下代码