1 条题解

  • 0
    @ 2025-10-8 16:50:55
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const LL Base=1e8;
    struct node
    {
        LL a[31100],len;
        node()
        {
            len=1;
            memset(a,0,sizeof(a));
        }
    };
    char st[110000];
    node operator*(node n1,node n2)
    {
        node no;
        no.len=n1.len+n2.len-1;
         
        for(int i=1;i<=n1.len;i++)for(int j=1;j<=n2.len;j++)
    	{
    		no.a[i+j-1]+=n1.a[i]*n2.a[j];
    		no.a[i+j]+=no.a[i+j-1]/Base;
    		no.a[i+j-1]%=Base;
    	}
         
        for(int i=1;i<=no.len;i++)
        {
            no.a[i+1]+=no.a[i]/Base;
            no.a[i]%=Base;
        }
         
        int i=no.len;
        while(no.a[i+1]>0)
        {
            i++;
            no.a[i+1]+=no.a[i]/Base;
            no.a[i]%=Base;
        }
        while((no.a[i]==0)&&(i>1)) i--;
        no.len=i;
         
        return no;
    }
    int main()
    {
        node no,n1,n2;
         
        scanf("%s",st+1);n1.len=strlen(st+1);
        for(int i=1;i<=n1.len;i++) n1.a[(n1.len-i+1+7)/8]=n1.a[(n1.len-i+1+7)/8]*10+st[i]-'0';
        n1.len=(n1.len+7)/8; 
         
        scanf("%s",st+1);n2.len=strlen(st+1);
        for(int i=1;i<=n2.len;i++) n2.a[(n2.len-i+1+7)/8]=n2.a[(n2.len-i+1+7)/8]*10+st[i]-'0';
        n2.len=(n2.len+7)/8; 
          
        no=n1*n2;
        printf("%lld",no.a[no.len]); 
        for(int i=no.len-1;i>=1;i--) printf("%08lld",no.a[i]);
        printf("\n");
        return 0;
    }
    
    • 1

    信息

    ID
    485
    时间
    1000ms
    内存
    128MiB
    难度
    8
    标签
    递交数
    442
    已通过
    58
    上传者