赏关(20分)

P1303 A*B Problem

zyx_dzpd @ 2024-08-31 09:56:16

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[250],c[500],b[250],p=0;
int main()
{
    cin>>s1>>s2;
    int i,j,l1=s1.size(),l2=s2.size();
    for(i=0;i<l1;i++) a[i]=s1[l1-i-1]-'0';
    for(i=0;i<l2;i++) b[i]=s2[l2-i-1]-'0';
    for(i=0;i<=l1;i++){
        for(j=0;j<=l2;j++){
            c[j+i]+=a[i]*b[j];  
        }
    }
    for(i=0;i<=l1;i++){
        if(c[i]>=10){
            c[i+1]+=c[i]/10;
            c[i]=c[i]%10;
        }
    }
    for(i=l1+l2;i>=0;i--) 
        if(c[i]!=0){
            p=i;
            break;
        }
    for(i=p;i>=0;i--)
    //  if(c[i]!=0)
            cout<<c[i];
    cout<<"\n";
    return 0;
}

by ikunTLE @ 2024-08-31 10:05:00

@zyx_dzpd 数组开小了


by DreamInk @ 2024-08-31 10:05:04

@zyx_dzpd 是不是要把数组开大点到2010(我没试过)


by _little_Cabbage_ @ 2024-08-31 10:17:05

@zyx_dzpd 需要把数组开到4010(即原要求 \times 2)因为在相乘的时候,原本 2000 的长度可能会翻倍。


by zyx_dzpd @ 2024-08-31 20:34:16

@ikunTLE @_littleCabbage @DreamInk 三位大佬目前没有RE 但有4个WA


by DreamInk @ 2024-09-01 15:05:22

@zyx_dzpd

1.数组还是要开大的

2.这个循环要改

for(i=0;i<=l1;i++){
    if(c[i]>=10){
        c[i+1]+=c[i]/10;
        c[i]=c[i]%10;
    }
}

应该是这样↓

i=0;i<=l1+l2;i++

因为你的上面那个循环

c[j+i]+=a[i]*b[j];  

所以你要遍历c数组应该到l1+l2结束


|