寫了好久的高精度乘法
就是一直錯,求改錯(不要其他高精乘代碼復制過來)
比較逗的事情是,我的這個代碼拿去交高精乘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;
}
要用代碼格式貼。這樣顯示出來的代碼根本不完整。
還有出了什麼錯誤也描述一下啊。