大佬求助wa第五个

P1303 A*B Problem

only76 @ 2020-06-15 18:44:58

#include<bits/stdc++.h>
using namespace std;
long long a1[100000],b1[100000],c1[100000],x,y,ment1,up1,jishu,ff;
string a,b;
int main()
{
    cin>>a>>b;
    for(int i=b.length()-1; i>=0; i--)
    {
        b1[x]=b[i]-48;
        x++;
    }
    for(int i=a.length()-1; i>=0; i--)
    {
        a1[y]=a[i]-48;
        y++;
    }
    for(int i=0; i<=1000; i++)
    {
        for(int j=0; j<=1000; j++)
        {   c1[i + j] += a1[i] * b1[j];
            c1[i + j + 1] += c1[i + j] / 10;
            c1[i + j] = c1[i + j] % 10;//
           }
    }
    for(int i=1000; i>=0; i--)
    {
        if(c1[i]!=0)
        {
            jishu=i;
            break;
        }
    }
    for(int j=jishu; j>=0; j--)
    {
        cout<<c1[j];
    }

}

by Svika @ 2020-06-15 18:46:57

你把1000改成2000试一下


by Wu_Ren @ 2020-06-15 18:47:17

每个数字不超过 10^{2000}

只循环 1000 会暴毙。


by only76 @ 2020-06-15 18:51:18

是不是要判断是不是负数


by only76 @ 2020-06-15 18:53:29

@bubaegbeiwan 我改成 ```cpp for(int i=0; i<=a.length(); i++) { for(int j=0; j<=b.length(); j++) { c1[i + j] += a1[i] * b1[j]; c1[i + j + 1] += c1[i + j] / 10; c1[i + j] = c1[i + j] % 10; } }


还是不行诶

by only76 @ 2020-06-15 19:06:58

@Wu_Ren 我发现了是结果输出的时候那里 for(int i=1000; i>=0; i--) { if(c1[i]!=0) { jishu=i; break; } } 1000改成a.length()+b.length()+10就行了


by only76 @ 2020-06-15 19:08:07

#include<bits/stdc++.h>
using namespace std;
long long a1[10000],b1[10000],c1[10000],x,y,ment1,up1,jishu,ff;
string a,b;
int main()
{
    cin>>a>>b;
    for(int i=b.length()-1; i>=0; i--)
    {
        b1[x]=b[i]-48;
        x++;
    }
    for(int i=a.length()-1; i>=0; i--)
    {
        a1[y]=a[i]-48;
        y++;
    }
    for(int i=0; i<=a.length(); i++)
    {
        for(int j=0; j<=b.length(); j++)
        {
            c1[i + j] += a1[i] * b1[j];
            c1[i + j + 1] += c1[i + j] / 10;
            c1[i + j] = c1[i + j] % 10;
        }
    }
    for(int i=a.length()+b.length()+10; i>=0; i--)
    {
        if(c1[i]!=0)
        {
            jishu=i;
            break;
        }
    }
    for(int j=jishu; j>=0; j--)
    {
        cout<<c1[j];
    }

}

by Svika @ 2020-06-15 21:17:13

@only76

#include<bits/stdc++.h>
using namespace std;
int a[10001],b[10001],c[10001];
char n1[10001],n2[10001];
int main()
{
    cin>>n1>>n2;
    int lena=strlen(n1),lenb=strlen(n2),i,x;
    for(i=0;i<lena;i++)a[lena-i]=n1[i]-'0';
    for(i=0;i<lenb;i++)b[lenb-i]=n2[i]-'0';
    for(int i=1;i<=lena;i++)
    {
        x=0;
        for(int j=1;j<=lenb;j++)
        {
            c[i+j-1]+=a[i]*b[j]+x;
            x=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
        c[i+lenb]=x;
    }
    int lenc=lena+lenb;
    while(c[lenc]==0&&lenc>1)lenc--;
    for(int i=lenc;i>=1;i--)cout<<c[i];
    return 0;
}

我直接把我的发上来吧,要不要抄是你自己的事,仅供参考


by Svika @ 2020-06-15 21:17:59

好吧,你已经过了


|