求大佬帮忙,不对。

P1303 A*B Problem

xueba1hao @ 2023-02-25 21:43:38

#include <bits/stdc++.h>
using namespace std;

int a[2005],b[2005],ans[2005],len_a,len_b,len_ans;

int main()
{
  string a1,b1;
  cin>>a1>>b1;
  len_a=a1.size();
  len_b=b1.size();
  for(int i=0; i<len_a; i++)a[i]=a1[i]-'0';
  for(int i=0; i<len_b; i++)b[i]=b1[i]-'0';
  reverse(a,a+len_a);
  reverse(b,b+len_b);
  for(int i=0; i<len_a; i++)
  {
    for(int j=0; j<len_b; j++)
    {
      ans[i+j]+=a[i]*b[j];
    }
  }
  while(ans[len_ans])len_ans++;
  for(int i=0; i<len_ans; i++)
  {
    ans[i+1]=ans[i]/10;
    ans[i]%=10;
  }
  while(ans[len_ans])len_ans++;
  for(int i=len_ans-1; i>=0; i--)
  {
    cout<<ans[i];
  }
  return 0;
}

by l4u5son6 @ 2023-04-15 21:58:27

大哥,是乘法不是加法,ans数组开的太小了。2000位乘以2000位所得的积可能是3999位或者4000位。


by l4u5son6 @ 2023-04-15 22:02:39

@xueba1hao


|