80分求助

P1303 A*B Problem

qiufangguo @ 2024-07-18 08:17:18


#include<bits/stdc++.h>
using namespace std;
char s1[2005],s2[2005];
int a[2005],b[2005],c[2005],x;
int main(){
    int la,lb,lc;
    scanf("%s",s1);
    scanf("%s",s2);
    la=strlen(s1);
    lb=strlen(s2);
    for(int i=0;i<la;i++)
        a[la-i]=s1[i]-'0';
    for(int i=0;i<lb;i++)
        b[lb-i]=s2[i]-'0';//字符串转数字+反转对齐数位 
    lc=la+lb;//积的长度(极端情况) 
    for(int i=1;i<=la;i++){
        x=0;
        for(int j=1;j<=lb;j++){
            c[i+j-1]+=a[i]*b[j]+x;//乘数a的第i位*乘数b的第j位=乘数c的i+j-1位 
            x=c[i+j-1]/10;//进位 
            c[i+j-1]%=10;
        }
        c[i+lb]=x;
    }//模拟竖式 
    while(c[lc]==0&&lc>1)lc--;//去0 
    for(int i=lc;i>=1;i--)printf("%d",c[i]);//输出 
    return 0;
}

by fuyi_fox @ 2024-07-18 08:59:30

两个因数最大 10^{2000},相乘后积最大是 10^{4000}。因此c数组应该开到 4000 的大小。


by qiufangguo @ 2024-07-18 09:56:14

@fuyi_fox 谢谢,AC了


|