C++高精度乘法求改错。。

写了好久的高精度乘法
就是一直错,求改错(不要其他高精乘代码复制过来)

比较逗的事情是,我的这个代码拿去交高精乘Wrong answer
直接拿去交高精加就AC了。。

#include
#define len 20000
using namespace std;

string s1,s2;

void init()
{
getline(cin,s1);
getline(cin,s2);

}

string add(string sx,string sy)
{
int a[len+1],b[len+1],ans[len+1];
for(int i=0;i a[s1.length()-i]=s1[i]-'0';
}
for(int i=0;i b[s2.length()-i]=s2[i]-'0';
}
int tp=0;int tail=max(s1.length(),s2.length());
for(int i=0;i ans[i]=(a[i]+b[i]+tp)%10;
tp=(a[i]+b[i]+tp)/10;
}
if(tp==1){
ans[max(s1.length(),s2.length())+1]=1;
tail++;
}
string answer;
char temp;
for(int i=tail;i>=1;i--){
temp=ans[i]+'0';
answer=answer+temp;
}
return answer;
}

string mul(string sx,string sy)
{
string used="0";
int a[len+1],b[len+1],c[len+1];
for(int i=0;i a[s1.length()-i]=s1[i]-'0';
}
for(int i=0;i b[s2.length()-i]=s2[i]-'0';
}
int tp=0;
for(int i=0;i for(int j=0;j c[j]=(a[i]*b[j]+tp)%10;
tp=(a[i]*b[j]+tp)/10;
}
int tail=s2.length()-1;
if(tp!=0){
c[s2.length()]=tp;
tail++;
}
string answer="";
char temp;
for(int k=tail;k>=0;k--){
temp=c[k]+'0';
answer+=temp;
}

    used=add(answer,used);      
}
return used;

}

int main()
{
init();
cout<<mul(s1,s2);

return 0;

}

要用代码格式贴。这样显示出来的代码根本不完整。
还有出了什么错误也描述一下啊。