60分,请大佬指教(后两个点TLE)。

P1303 A*B Problem

ubsonth @ 2018-03-24 12:42:11

#include<bits/stdc++.h>
using namespace std;
int main(){
    char a1[110],b1[110];
    int a[110],b[110],c[110];
    int lena,lenb,x,y;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    scanf("%s%s",a1,b1);
    lena=strlen(a1);
    lenb=strlen(b1);
    for(int i=0;i<=lena-1;i++){
        a[lena-i]=a1[i]-'0';
    }
    for(int i=0;i<=lenb-1;i++){
        b[lenb-i]=b1[i]-'0';
    }
    for(int j=1;j<=lenb;j++){
        x=0;
        for(int i=1;i<=lena;i++)
        {
            x=a[i]*b[j];
            y=c[i+j-1]+x; 
            c[i+j-1]=y%10;   
            c[i+j]=y/10+c[i+j];
        }
    }
    int lenc=lena+lenb;
    while(c[lenc]==0&&lenc>1)
    {
        lenc--;
    }
    for(int i=lenc;i>=1;i--){
        cout<<c[i];
    }
    return 0;
}

by stoorz @ 2018-03-24 13:00:39

把数组开大一点试一试


by stoorz @ 2018-03-24 13:01:16

还有可以去掉memset,memset有点耗时


by x义x @ 2018-03-24 13:15:08

首先数组开大

memset不需要,这玩意比较耗时,abc三个数组可以开到全局,这样就不需要清0了。


by Fraction @ 2018-03-24 13:44:16

还可以加static


by Fraction @ 2018-03-24 13:45:54

你的数组好像开小了


|