一、大整数的存储

用数组存,每一位存一个数字,从后往前存,即个位数在第0号

二、四种运算

两个数相加(位数为10^6)

模拟逢十进一

// 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="")

两个数相减(位数为10^6)

Untitled

步骤:

  1. 判断A≥B?
  2. 写一个大数减小数函数

注意:

Untitled

因此,用$(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="")

大数乘小数(len(A)≤10^6,a≤10000)