#include <bits/stdc++.h>
using namespace std;
#define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
#define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
#define mst(a,x) memset(a,x,sizeof(a))
#define fi first
#define se second
#ifndef qwq
int cansel_sync=[]{ios::sync_with_stdio(0); cin.tie(0); return 0;}();
#endif
const double err=1e-11; typedef long long ll; const int inf=~0u>>2; const ll INF=~0ull>>2; ll read(){ll x; if(scanf("%lld",&x)==-1)exit(0); return x;} typedef double lf; typedef long double llf; const lf pi=acos(-1); lf readf(){lf x; if(scanf("%lf",&x)==-1)exit(0); return x;} template<typename T> T sqr(const T &x){return x*x;} typedef pair<int,int> pii; template<typename A,typename B> ostream &operator<<(ostream &o,const pair<A,B> &x){return o<<'('<<x.fi<<','<<x.se<<')';}
//mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const int N=200010;
const int mod=(1?1000000007:998244353); ll mul(ll a,ll b,ll m=mod){return a*b%m;} ll qpow(ll a,ll b,ll m=mod){ll ans=1; for(;b;a=mul(a,a,m),b>>=1)if(b&1)ans=mul(ans,a,m); return ans;} ll getinv(ll v,ll m=mod){return qpow(v,m-2,m);}
//#define int ll
struct big{
vector<ll> a;
static const int k=100000000;
int size()const{return a.size();}
big(){a.push_back(0);}
explicit big(const ll &x){ //接收ll
*this=big(to_string(x));
}
explicit big(const string &s){ //接收string
int w=8,len=s.size();
int f=(s[0]=='-')?-1:1;
static int p10[]={1,10,100,1000};
a.resize(len/w+1);
repeat(i,0,len-(f==-1))
a[i/w]+=f*(s[len-1-i]-48)*p10[i%w];
adjust();
}
int sgn(){return a.back()>=0?1:-1;} //这个只能在强/弱调整后使用
void shrink(){ //收缩(内存不收缩)
while(size()>1 && a.back()==0)a.pop_back();
}
void adjust(){ //弱调整
repeat(i,0,3)a.push_back(0);
repeat(i,0,size()-1){
a[i+1]+=a[i]/k;
a[i]%=k;
}
shrink();
}
void final_adjust(){ //强调整
adjust();
int f=sgn();
repeat(i,0,size()-1){
int t=(a[i]+k*f)%k;
a[i+1]+=(a[i]-t)/k;
a[i]=t;
}
shrink();
}
operator string(){ //转换成string
static char s[10010]; char *p=s;
final_adjust();
if(sgn()==-1)*p++='-';
repeat_back(i,0,size())
sprintf(p,i==size()-1?"%lld":"%08lld",abs(a[i])),p+=strlen(p);
return s;
}
const ll &operator[](int n)const{ //访问
return a[n];
}
ll &operator[](int n){ //弹性访问
repeat(i,0,n-size()+1)a.push_back(0);
return a[n];
}
};
big operator+(big a,const big &b){
repeat(i,0,b.size())a[i]+=b[i];
a.adjust();
return a;
}
big operator-(big a,const big &b){
repeat(i,0,b.size())a[i]-=b[i];
a.adjust();
return a;
}
big operator*(const big &a,const big &b){
big ans;
repeat(i,0,a.size()){
repeat(j,0,b.size())
ans[i+j]+=a[i]*b[j];
ans.adjust();
}
return ans;
}
ll operator%(const big &a,ll mod){
ll ans=0,p=1;
repeat(i,0,a.size()){
ans=(ans+p*a[i])%mod;
p=(p*a.k)%mod;
}
return (ans+mod)%mod;
}
bool operator<(big a,big b){
a.final_adjust();
b.final_adjust();
repeat_back(i,0,max(a.size(),b.size()))
if(a[i]!=b[i])return a[i]<b[i];
return 0;
}
bool operator==(big a,big b){
a.final_adjust();
b.final_adjust();
repeat_back(i,0,max(a.size(),b.size()))
if(a[i]!=b[i])return 0;
return 1;
}
signed main(){
string a,b;
cin>>a>>b;
cout<<string(big(a)*big(b))<<endl;
return 0;
}
Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
Testcase #1 | 3 s | 6 MB + 388 KB | Time Limit Exceeded | Score: 0 | 显示更多 |