P1303 c++ 不知道为啥不对

P1303 A*B Problem

Mark_666 @ 2023-12-31 11:25:13

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[2010],b[2010],c[10000];
int cnt1,cnt2,cnt3;
int main()
{
    cin>>s1>>s2;
    cnt1=s1.size();
    cnt2=s2.size();
    for(int i=1;i<=cnt1;i++)
        a[i]=s1[cnt1-i]-'0';
    for(int i=1;i<=cnt2;i++)
        b[i]=s2[cnt2-i]-'0';
    cnt3=cnt1+cnt2;
    for(int i=1;i<=cnt1;i++)
    {
        for(int j=1;j<=cnt2;j++)
        {
            c[i+j-1]=a[i]*b[i];
        }
    }
    for(int i=1;i<cnt3;i++)
    {
        if(c[i]>9)
        {
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    }
    while(c[cnt3]==0&&cnt3>1) cnt3--;
    for(int i=cnt3;i>=1;i--)
        cout<<c[i];
    return 0;
}

输入 10 100 答案就不对


by qwertyuiop951357 @ 2023-12-31 11:33:19

1.在计算 c[i+j-1] 时,应该是 a[i] * b[j] 而不是 a[i] * b[i]

2.在计算乘积时,应该使用一个新的数组 d 来存储乘积,而不是覆盖 c 数组。

3.应该将结果从 d 数组复制回 c 数组。

4.在最后的输出循环中,应该从 cnt3 开始倒序输出,而不是从 1 开始。


|