用数组存,每一位存一个数字,从后往前存,即个位数在第0号
模拟逢十进一
// c++ 板子
vector<int> add(vector<int> &A, vector<int> &B){
vector<int> c;
int t; //进位
//从个位开始看
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; //这一步很绝,把进位留在t里面了
}
if(t) c.push_back(1);
return c;
}
// 用string读,用vector存
int main(){
string a, b;
vector<int> A, B;
cin >> a >> b;
for(i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
for(i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');
auto c = add(A,B);
for(i = c.size() - 1; i >= 0; i--) cout << c[i] <<"";
return 0;
# python板子
def add(A, B):
c = []
t = 0
i = 0
while i < len(A) or i < len(B):
if i < len(A):
t += A[i]
if i < len(B):
t += B[i]
c.append(t % 10)
t //= 10
i += 1
if t > 0:
c.append(1)
return c
a = list(map(int, list(input())))
b = list(map(int, list(input())))
A = []
B = []
for i in range(len(a)-1,-1,-1):
A.append(a[i])
for i in range(len(b)-1,-1,-1):
B.append(b[i])
c = add(A,B)
for i in range(len(c)-1, -1, -1):
print(c[i],end="")
步骤:
注意:
因此,用$(t + 10)\%10$来表示这两种情况
高精度相减板子:
# 判断A和B的大小
def cmp(A, B):
if len(A) != len(B): # 长度不一样
return len(A) > len(B)
# 长度一样,一位一位对比
for i in range(len(a) - 1, -1, -1):
if A[i] != B[i]:
return A[i] > B[i]
return True
def sub(A, B):# A > B
c = []
t = 0 # 进位
for i in range(len(A)): # 因为一定是A大于B
# t = A[i]-B[i]-t
t = A[i] - t
# 要B[i]有数字才可以减B[i]
if i < len(B):
t -= B[i]
c.append((t + 10) % 10)
if t < 0:
t = 1
else:
t = 0
# c从个位开始存
# 因为c一定和A一样长,但如果结果长度比A长度小,即高位数为0,则不应该打印出这些0,应该去掉
# 但如果结果为0,则个位数为0,个位数的0不应该去掉,所以要加个len(c)>0
while len(c) > 1 and c[-1] == 0:
c.pop()
return c
a = list(map(int, list(input())))
b = list(map(int, list(input())))
A = []
B = []
for i in range(len(a)-1,-1,-1):
A.append(a[i])
for i in range(len(b)-1,-1,-1):
B.append(b[i])
# 要判断A和B的大小
if cmp(A,B):
c = sub(A, B)
else:
c = sub(B, A)
print("-",end="")
for i in range(len(c)-1, -1, -1):
print(c[i],end="")