80分 第一项wa, Too long on line 1. 求指教

P1303 A*B Problem

homi @ 2023-02-16 14:53:15


#include <bits/stdc++.h>
using namespace std;
int a[2000],b[2000],ans[4000],len_a,len_b,len_ans;
void read(int *a,int &len)
{
    string s;
    cin>>s;
    len=s.length();
    for(int i=0;i<len;i++)
      a[i]=s[i]-48;
    reverse(a,a+len);  
}
int main()
{ 
    read(a,len_a);
    read(b,len_b);
    len_ans=len_a+len_b-1;
    for(int i=0;i<len_a;i++)
      for(int j=0;j<len_b;j++)
        ans[i+j]+=a[i]*b[j];
    for(int i=0;i<len_ans;i++)
    if(ans[i]>9)
    {   
        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 LucasXu80 @ 2023-02-16 15:00:55

有没有考虑过一种情况,

len_ans=len_a+len_b-1;

这样算出来的len_ans大于实际的答案长度,使得代码会多输出。


by homi @ 2023-02-16 15:05:01

@LucasXu80 额 ,我不懂代码,晚上孩子放学我给他看下,让他自己再想想,感谢您的回复


by LucasXu80 @ 2023-02-16 15:08:52

@homi2011 不用谢。因为我后面可能无法回复了,如果他还是无法理解的话,可以提示他,0乘任何数都会得到一个一位数。


by homi @ 2023-02-16 15:12:54

@LucasXu80 好的


by winterl @ 2023-04-26 19:33:27

@LucasXu80 这句话一下把我点醒,想了好久来着


by wangjiawen @ 2023-05-13 21:09:29

好像不是,第一项结果是0,特判了吗?( 其实我没看代码。


|