求大神看下这个高精度乘法错在哪里

P1009 [NOIP1998 普及组] 阶乘之和

yu18250787255 @ 2023-01-06 00:25:16

#include <iostream>
#include <cstring>
using namespace std;

main()
{
    int A[200],B[200],C[200];
    memset(A,0,sizeof(A));
    memset(B,0,sizeof(B));
    memset(C,0,sizeof(C));
    string a,b;
    cin>>a>>b;
    int lena=a.length(),lenb=b.length();
    for(int i=0;i<=lena;i++)
    {
        A[i]=a[lena-i]-'0'; 
    }
    for(int i=0;i<=lenb;i++)
    {
        B[i]=b[lenb-i]-'0'; 
    }    
    int x;
    for(int i=0;i<lena;i++)
    {
        x=0;
        for(int j=0;j<lenb;j++)
        {
            C[i+j]+=A[i]*B[j]+x;
            x=C[i+j]/10;
            C[i+j]%=10;
        }
        C[i+lenb]=x;
    }
    int zong=lena+lenb-1;
    while(C[zong]==0 && zong>1)
    {
        zong--;
    }
    for(int i=zong;i>=0;i--)
    {
        cout<<C[i];
    } 
    return 0;
}

by MarchKid_J0e @ 2023-01-06 07:18:26

@yu18250787255 话说学 OI 学到现在才发现 main 前面不写类型的。

bug:都是下标性质的问题,缺个 -1+1 啥的。


by MarchKid_Joe @ 2023-01-06 07:19:13

#include <iostream>
#include <cstring>
using namespace std;

main()
{
    int A[200],B[200],C[200];
    memset(A,0,sizeof(A));
    memset(B,0,sizeof(B));
    memset(C,0,sizeof(C));
    string a,b;
    cin>>a>>b;
    int lena=a.length(),lenb=b.length();
    for(int i=0;i<lena;i++)
    {
        A[i]=a[lena-i-1]-'0'; //-1
    }
    for(int i=0;i<lenb;i++)
    {
        B[i]=b[lenb-i-1]-'0'; //-1
    }    
    int x;
    for(int i=0;i<lena;i++)
    {
        x=0;
        for(int j=0;j<lenb;j++)
        {
            C[i+j]+=A[i]*B[j]+x;
            x=C[i+j]/10;
            C[i+j]%=10;
        }
        C[i+lenb]=x;
    }
    int zong=lena+lenb;//+1
    while(C[zong-1]==0 && zong>1)//-1
    {
        zong--;
    }
    for(int i=zong-1;i>=0;i--)//-1
    {
        cout<<C[i];
    } 
    return 0;
}

by yu18250787255 @ 2023-01-06 10:14:03

@MarchKid_Joe 谢谢!!!问题已解决


|