只过了一个点呜呜呜

P1303 A*B Problem

qip101 @ 2021-07-11 20:27:07

#include <iostream> 
#include <cstdio>
#include <string>
#include <algorithm>
#define maxn 5010
using namespace std;
int a[maxn],b[maxn],c[maxn];
string A,B;
int main() 
{
    cin >> A >> B;
    int lena=A.length();
    int lenb=B.length();
    for(int i=lena-1;i>=0;i--) a[lena-i]=A[i]-'0';
    for(int i=lenb-1;i>=0;i--) b[lenb-i]=B[i]-'0';
    for(int i=1;i<=lena;i++)
        for(int j=1;j<=lenb;j++)
            c[i+j-1]+=a[i]*b[i];
    int len=lena+lenb;
    for(int i=1;i<=len;i++)
    {
        c[i+1]+=c[i]/10;
        c[i]%=10;
    }
    for(;!c[len];)
        len--;
    for(int i=max(1,len);i>=1;i--)
        printf("%d",c[i]);
    return 0;
}

by little_kongbai @ 2021-07-11 21:13:32

改了一会 发现两个错误

18h 应该是

c[i+j-1]+=a[i]*b[j];

个人认为后面循环处理进位的时候要判断一下是否大于10 不然会出现全部是0的情况

if(c[i]>10){
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }

40pts代码 剩下问题还在找.....

#include <iostream> 
#include <cstdio>
#include <string>
#include <algorithm>
#define maxn 5010
using namespace std;
int a[maxn],b[maxn],c[maxn];
string A,B;
int main() 
{
    cin >> A >> B;
    int lena=A.length();
    int lenb=B.length();
    for(int i=lena-1;i>=0;i--) a[lena-i]=A[i]-'0';
    for(int i=lenb-1;i>=0;i--) b[lenb-i]=B[i]-'0';
    for(int i=1;i<=lena;i++)
        for(int j=1;j<=lenb;j++)
            c[i+j-1]+=a[i]*b[j];
    int len=lena+lenb;
    for(int i=1;i<=len;i++)
    {
        if(c[i]>10){
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    }
    for(;!c[len];)
        len--;
    for(int i=max(1,len);i>=1;i--)
        printf("%d",c[i]);
    return 0;
}

|