#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
struct Bigint {
int len, a[maxn];
Bigint(int x = 0) {
memset(a, 0, sizeof(a));
for (len = 1; x; len++)
a[len] = x % 10, x /= 10;
len--;
}
int &operator[](int i) {
return a[i];
}
void flatten(int L) {
len = L;
for (int i = 1; i <= len; i++)
a[i + 1] += a[i] / 10, a[i] %= 10;
for (; !a[len]; )
len--;
}
void print() {
for (int i = max(len, 1); i >= 1; i--)
printf("%d", a[i]);
}
};
Bigint operator+(Bigint a, Bigint b) {
Bigint c;
int len = max(a.len, b.len);
for (int i = 1; i <= len; i++)
c[i] += a[i] + b[i];
c.flatten(len + 1);
return c;
}
Bigint operator*(Bigint a, Bigint b) {
Bigint c;
for(int i = 1;i <= a.len;i++){
for(int j = 1;j <= b.len;j++){
c[i + j - 1] += a[i] * b[i];
}
}
c.flatten(a.len + b.len);
return c;
}
signed main(){
Bigint a,b,c;
a = Bigint(2212);
b = Bigint(22332);
c = a * b;
c.print();a
}
我自己重新打了一个高进度乘高进度,结果报错了。
玄关QwQ