AC代码如下,但这应该是错误的
#include <iostream>
#include <string>
using namespace std;
string ina,inb;
short a[2005],b[2005];
short ans[2005];
void Multiply(short a[],short b[]){
ans[0]=a[0]+b[0];
for (int i=1;i<=a[0];i++){
for (int j=1;j<=b[0];j++){
ans[i+j-1]+=a[i]*b[j];
}
}
for (int i=1;i<=ans[0];i++){
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
while (ans[0]>1&&ans[ans[0]]==0) ans[0]--;
}
void print(){
for (int i=ans[0];i>0;i--){
cout << ans[i];
}
cout << endl;
}
int main(){
freopen("/Users/liyumei1973/Desktop/信奥赛/作业/sample.in","r",stdin);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin >> ina;
cin >> inb;
a[0]=ina.size(),b[0]=inb.size();
for (int i=a[0],j=0;i>0;i--,j++){
a[i]=ina[j]-'0';
}
for (int i=b[0],j=0;i>0;i--,j++){
b[i]=inb[j]-'0';
}
Multiply(a,b);
print();
return 0;
}
问题在于ans数组的大小。 如果按照题目的数据范围,a和b都是2000位的数字,那么他们相乘可以达到4000位数字,以我ans开的数据范围会RE 数据需要加强