可这样
```
#include<bits/stdc++.h>
using namespace std;
inline const int Get_Int() {
int num=0,bj=1;
char x=getchar();
while(x<'0'||x>'9') {
if(x=='-')bj=-1;
x=getchar();
}
while(x>='0'&&x<='9') {
num=num*10+x-'0';
x=getchar();
}
return num*bj;
}
struct BigInteger {
static const int BASE=100000000;
static const int WIDTH=8;
vector<long long>s;
BigInteger() {
*this=0;
}
BigInteger(const int& num) {
*this=num;
}
//赋值
BigInteger operator = (int num) {
s.clear();
do {
s.push_back(num%BASE);
num/=BASE;
} while(num>0);
return *this;
}
BigInteger operator = (const string& str) {
s.clear();
int x,len=(str.length()-1)/WIDTH+1;
for(int i=0; i<len; i++) {
int end=str.length()-i*WIDTH;
int start=max(0,end-WIDTH);
sscanf(str.substr(start,end-start).c_str(),"%lld",&x);
s.push_back(x);
}
return *this;
}
//比较
bool operator < (const BigInteger& b) {
if(s.size()<b.s.size())return true;
if(s.size()>b.s.size())return false;
for(int i=s.size()-1; i>=0; i--) {
if(s[i]<b.s[i])return true;
if(s[i]>b.s[i])return false;
}
return false;
}
bool operator >= (const BigInteger& b) {
return !(*this<b);
}
bool operator == (const BigInteger& b) {
if(s.size()!=b.s.size())return false;
for(int i=0; i<s.size(); i++)
if(s[i]!=b.s[i])return false;
return true;
}
//+
BigInteger operator + (const BigInteger& b) {
BigInteger c;
c.s.clear();
for(int i=0,g=0; ; i++) {
if(g==0&&i>=s.size()&&i>=b.s.size())break;
int x=g;
if(i<s.size())x+=s[i];
if(i<b.s.size())x+=b.s[i];
c.s.push_back(x%BASE);
g=x/BASE;
}
return c;
}
//-
BigInteger operator - (const BigInteger& b) {
BigInteger c;
c=*this;
for(int i=0; i<c.s.size(); i++) {
int tmp;
if(i>=b.s.size())tmp=0;
else tmp=b.s[i];
if(c.s[i]<tmp) {
c.s[i+1]-=1;
c.s[i]+=BASE;
}
c.s[i]-=tmp;
}
while(c.s.back()==0&&c.s.size()>1)c.s.pop_back();
return c;
}
void operator -= (const BigInteger& b) {
*this=*this-b;
}
//*
BigInteger operator * (const BigInteger& b) {
BigInteger c;
c.s.resize(s.size()+b.s.size());
for(int i=0; i<s.size(); i++)
for(int j=0; j<b.s.size(); j++)c.s[i+j]+=s[i]*b.s[j];
for(int i=0; i<c.s.size()-1; i++) {
c.s[i+1]+=c.s[i]/BASE;
c.s[i]%=BASE;
}
while(c.s.back()==0&&c.s.size()>1)c.s.pop_back();
return c;
}
friend istream& operator >> (istream& input,BigInteger& x) {
string s;
if(!(input>>s))return input;
x=s;
return input;
}
friend ostream& operator << (ostream& output,const BigInteger& x) {
output<<x.s.back();
for(int i=x.s.size()-2; i>=0; i--) {
char buf[20];
sprintf(buf,"%08d",x.s[i]);
for(int j=0; j<strlen(buf); j++)output<<buf[j];
}
return output;
}
};
// /
BigInteger Copy(const BigInteger& b,int x) {
BigInteger t;
t.s.resize(b.s.size()+x);
for(int i=0; i<b.s.size(); i++)t.s[i+x]=b.s[i];
return t;
}
BigInteger Divide(const BigInteger& a,const BigInteger& b,BigInteger& mod) {
BigInteger c;
c.s.resize(a.s.size()-b.s.size()+1);
mod=a;
int Pow[(int)log2(BigInteger::BASE)+5];
Pow[0]=1;
for(int i=1; i<=log2(BigInteger::BASE); i++)Pow[i]=Pow[i-1]*2;
for(int i=c.s.size()-1; i>=0; i--) {
BigInteger t;
t=Copy(b,i);
for(int j=log2(BigInteger::BASE); j>=0; j--)
if(mod>=t*Pow[j]) {
c.s[i]+=Pow[j];
mod-=t*Pow[j];
}
}
while(c.s.back()==0&&c.s.size()>1)c.s.pop_back();
return c;
}
BigInteger a,b;
int main() {
cin>>a>>b;
if(a<b)cout<<a+b<<endl<<'-'<<b-a<<endl<<a*b<<endl<<0<<endl<<a<<endl;
else {
BigInteger c,d;
c=Divide(a,b,d);
cout<<a+b<<endl<<a-b<<endl<<a*b<<endl<<c<<endl<<d<<endl;
}
return 0;
}
```
by jinzhilong @ 2023-11-25 11:17:09
@[jinzhilong](/user/1073550) 我知道这个是对的,但我只想知道为什么我和测试点1的输出完全一致却是wa。
最离谱的是我加了个除法判断0之后,结果由tle变成wa了。。。
by czm708033 @ 2023-11-25 15:57:40
@[czm708033](/user/94046) 爱莫能助
by jinzhilong @ 2023-11-26 16:00:15