代码(WA on #4,#5):
#include<bits/stdc++.h>
using namespace std;
string BigPlus(string a,string b){
while(a[0]=='0'&&a.size()>1){
a.erase(0,1);
}
while(b[0]=='0'&&a.size()>1){
b.erase(0,1);
}
int maxlen=max(a.size(),b.size())-1;
if(a.size()-1==maxlen){
while(b.size()-1<maxlen){
b='0'+b;
}
}else{
while(a.size()-1<maxlen){
a='0'+a;
}
}
bool f=0;
string c="";
for(int i=maxlen;i>=0;i--){
int temp=a[i]+b[i]-96;
if(f){
temp++;
}
if(temp>=10){
f=1;
temp-=10;
}else{
f=0;
}
char num=(char)(temp+48);
c=num+c;
if(f==1&&i==0){
c="1"+c;
}
}
while(c[0]=='0'&&a.size()>1){
c.erase(0,1);
}
return c;
}
string a,b,c="0";
int main(){
cin>>a>>b;
if(a=="0"||b=="0"){
cout<<0;
return 0;
}
while(a[0]=='0'&&a.size()>1){
a.erase(0,1);
}
while(b[0]=='0'&&a.size()>1){
b.erase(0,1);
}
int cnt=-1;
for(int i=b.size()-1;i>=0;i--){
cnt++;
string temp="";
int nowb=b[i]-48;
int carry=0;
for(int i=a.size()-1;i>=0;i--){
int nowa=a[i]-48;
int nowans=nowb*nowa;
if(carry){
nowans+=carry;
}
if(nowans>10){
carry=nowans/10;
nowans%=10;
}else{
carry=0;
}
char num=(char)(nowans+48);
temp=num+temp;
if(i==0&&carry){
temp=(char)(carry+48)+temp;
}
}
int tempcnt=cnt;
while(tempcnt--){
temp=temp+"0";
}
c=BigPlus(c,temp);
}
while(c[0]=='0'&&a.size()>1){
c.erase(0,1);
}
cout<<c;
return 0;
}