#include <iostream>
#include <cstring>
#include <string>
constexpr int maxn = 2e4 + 5;
struct BigInterger{
int a[maxn],len,sign = 1;
int &operator[](int i){return a[i];}
BigInterger(int x = 0){
memset(a,0,sizeof(a));
for (len = 1;x;len++)
a[len] = x % 10,x /= 10;
len--;
}
BigInterger &operator=(int x){return *this = BigInterger(x);}
void flatten(int l){
len = l;
for (int i = 1;i <= len;i++)
a[i + 1] += a[i] / 10,a[i] %= 10;
while (!a[len] && len > 1) len--;
}
void borrow(int l){
len = l;
for (int i = 1;i <= len;i++)
while (a[i] < 0)
a[i + 1]--,a[i] += 10;
flatten(l);
}
bool operator>(BigInterger x){
if (x.len != len) return len > x.len;
for (int i = len;i;i--)
if (x[i] != a[i])
return a[i] > x[i];
return 0;
}
BigInterger operator+(BigInterger x){
BigInterger ans;
for (int i = 1;i <= std::max(x.len,len);i++) ans[i] = a[i] + x[i];
ans.flatten(std::max(x.len,len) + 1);
return ans;
}
BigInterger operator-(BigInterger x){
BigInterger ans;
if (x > *this){
ans = x - *this;
ans.sign = -1;
return ans;
}
for (int i = 1;i <= std::max(len,x.len);i++) ans[i] = a[i] - x[i];
ans.borrow(std::max(len,x.len));
return ans;
}
BigInterger operator*(BigInterger x){
BigInterger ans;
for (int i = 1;i <= len;i++)
for (int j = 1;j <= x.len;j++)
ans[i + j - 1] += a[i] * x[j];
ans.flatten(len + x.len + 1);
return ans;
}
BigInterger operator*(int x){
BigInterger ans;
for (int i = 1;i <= len;i++) ans[i] = a[i] * x;
ans.flatten(len + 11);
return ans;
}
int operator/(BigInterger x){
int l = 1,r = 1e9,mid,ans;
while (l <= r){
mid = (l + r) / 2;
if (x * mid > *this) ans = mid,r = mid - 1;
else l = mid + 1;
}
return ans - 1;
}
BigInterger operator%(BigInterger x){return *this - x * (*this / x);}
};
std::istream &operator>>(std::istream &is,BigInterger &x){
std::string s;
is >> s;
x.len = s.length();
for (int i = 1,j = x.len - 1;j >= 0;i++,j--) x[i] = s[j] - '0';
return is;
}
std::ostream &operator<<(std::ostream &os,BigInterger x){
if (x.sign == -1) os << '-';
for (int i = x.len;i;i--) os << x[i];
return os;
}
int main(){
BigInterger a,b;
std::cin >> a >> b;
std::cout << a + b << '\n';
std::cout << a - b << '\n';
std::cout << a * b << '\n';
std::cout << a / b << '\n';
std::cout << a % b << '\n';
return 0;
}
问题出在第四行,应该是除法的重载有问题,所以重点看下除法就行