AC失败……

P1303 A*B Problem

ALexanse @ 2022-09-15 20:33:47

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
    char a[4020]={0},b[4020]={0};
    int p[4020]={0},q[4020]={0},w[6000]={0};
    cin>>a>>b;
    long long m=strlen(a);
   long long n=strlen(b);
    long long t=m+n;
    for(long long i=0;i<m;i++)
    {
        p[m-i]=a[i]-'0';
    }
     for(long long i=0;i<n;i++)
    {
        q[n-i]=b[i]-'0';

    }
    for(long long i=1;i<=m;i++)
    {
        for(long long j=1;j<=n;j++)
        {
            w[i+j-1]+=p[i]*q[j];
        }
    }
    for(long long k=1; k<=t; k++)
    {
        if(w[k]>9)
        {
            w[k+1]+=w[k]/10;
            w[k]=w[k]%10;
        }

    }
 while(t>0&&w[t]==0) t--;

    for(long long k=t;k>=1;k--)
        printf("%d",w[k]);
    return 0;
}

by iiiiiyang @ 2022-09-15 20:34:42

@ALexanse 进位应该放在循环里头吧


by ALexanse @ 2022-09-15 20:56:26

@forqprever 其实我刚刚AC了,问题其实出在没考虑结果为0的情况```cpp

include<stdlib.h>

include<stdio.h>

include<string.h>

include<iostream>

using namespace std; int main() { char a[20001]={0},b[20001]={0}; int p[20001]={0},q[20001]={0},w[40005]={0}; cin>>a>>b; long long m=strlen(a); long long n=strlen(b); long long t=m+n; for(long long i=0;i<m;i++) { p[m-i]=a[i]-'0'; } for(long long i=0;i<n;i++) { q[n-i]=b[i]-'0';

}
for(long long i=1;i<=m;i++)
{
    for(long long j=1;j<=n;j++)
    {
        w[i+j-1]+=p[i]*q[j];
    }
}
for(long long k=1; k<=t; k++)
{
    if(w[k]>9)
    {
        w[k+1]+=w[k]/10;
        w[k]=w[k]%10;
    }

}

while(t>0&&w[t]==0) t--;//此处乘法与加法的不同之处在于加法最多进位一位,而乘法不然 if(t==0) { printf("0"); return 0; } for(long long k=t;k>=1;k--) printf("%d",w[k]); return 0; }


by ALexanse @ 2022-09-15 20:56:59

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
    char a[20001]={0},b[20001]={0};
    int p[20001]={0},q[20001]={0},w[40005]={0};
    cin>>a>>b;
    long long m=strlen(a);
   long long n=strlen(b);
    long long t=m+n;
    for(long long i=0;i<m;i++)
    {
        p[m-i]=a[i]-'0';
    }
     for(long long i=0;i<n;i++)
    {
        q[n-i]=b[i]-'0';

    }
    for(long long i=1;i<=m;i++)
    {
        for(long long j=1;j<=n;j++)
        {
            w[i+j-1]+=p[i]*q[j];
        }
    }
    for(long long k=1; k<=t; k++)
    {
        if(w[k]>9)
        {
            w[k+1]+=w[k]/10;
            w[k]=w[k]%10;
        }

    }

 while(t>0&&w[t]==0) t--;//此处乘法与加法的不同之处在于加法最多进位一位,而乘法不然
   if(t==0)
    {
        printf("0");
        return 0;
    }
    for(long long k=t;k>=1;k--)
        printf("%d",w[k]);
    return 0;
}

|