answer

P1303 A*B Problem

leo666 @ 2017-08-24 19:59:17

#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=2000+1000;
char s1[maxn],s2[maxn];
int a[maxn],b[maxn],c[maxn*maxn];
int main()
{
    scanf("%s%s",s1,s2);
    int lena=strlen(s1),lenb=strlen(s2);
    for(int i=0;i<lena;i++) a[i]=s1[lena-i-1]-'0';
    for(int i=0;i<lenb;i++) b[i]=s2[lenb-i-1]-'0';
    for(int i=0;i<lena;i++)
        for(int j=0;j<lenb;j++) {
            c[i+j]+=a[i]*b[j];
            c[i+j+1]+=c[i+j]/10;
            c[i+j]%=10;
        }
    int lenc=lena+lenb;
    while(lenc>1&&c[lenc-1]==0) lenc--;
    for(int i=lenc-1;i>=0;i--) printf("%d",c[i]);
    return 0;
}

by 起名真的很难 @ 2017-08-24 20:27:17

你要发你去题解里发好伐?听说灰名越来越跳了?


by moye到碗里来 @ 2017-08-24 20:38:00

真的是越来越跳


by Pisces @ 2017-10-02 14:45:37

社会版

#include<bits/stdc++.h>
using namespace std;
char a[10000],b[10000];
int c[10000],d[10000],e[10000];
int main()
{
    int j,i,s,la,lb,k,i1=0,j1=0;
    scanf("%s",a);
    scanf("%s",b);
    if(a[0]=='0'||b[0]=='0') cout<<0;
    else
    {
        la=strlen(a);lb=strlen(b);
        for(i1=la/4+bool(la%4)-1,i=la-1;i1>=0;i-=4,i1--)c[la/4+bool(la%4)-i1]=(a[i]-'0')*bool(a[i])+(a[i-1]-'0')*10*bool(a[i-1])+(a[i-2]-'0')*100*bool(a[i-2])+(a[i-3]-'0')*1000*bool(a[i-3]);
        for(j1=lb/4+bool(lb%4)-1,j=lb-1;j1>=0;j-=4,j1--)d[lb/4+bool(lb%4)-j1]=(b[j]-'0')*bool(b[j])+(b[j-1]-'0')*10*bool(b[j-1])+(b[j-2]-'0')*100*bool(b[j-2])+(b[j-3]-'0')*1000*bool(b[j-3]);
        for(j=1;j<=lb/4+bool(lb%4);j++)
        {
            for(i=1;i<=la/4+bool(la%4);i++)
            {
                s=c[i]*d[j];k=s/10000;s=s%10000;
                e[i+j-1]+=s;e[i+j]+=k;
            }
        }
        for(i=1;i<=la/4+bool(la%4)+lb/4+bool(lb%4);i++)
        {
            if(e[i]>=10000)
            {
                e[i+1]+=(e[i]/10000);
                e[i]%=10000;
            }
        }
        if(e[la/4+bool(la%4)+lb/4+bool(lb%4)]!=0||la/4+bool(la%4)+lb/4+bool(lb%4)==1)
        {
            printf("%d",e[la/4+bool(la%4)+lb/4+bool(lb%4)]);
            for(j=la/4+bool(la%4)+lb/4+bool(lb%4)-1;j>=1;j--)printf("%04d",e[j]);
        }
        else if(e[la/4+bool(la%4)+lb/4+bool(lb%4)-1]!=0||la/4+bool(la%4)+lb/4+bool(lb%4)-1==1)
        {
            printf("%d",e[la/4+bool(la%4)+lb/4+bool(lb%4)-1]);
            for(j=la/4+bool(la%4)+lb/4+bool(lb%4)-2;j>=1;j--)printf("%04d",e[j]);
        }
    }
    return 0;
}

|