为什么第一个0的样例都过不了,求大佬
  • 板块P1303 A*B Problem
  • 楼主hao2230
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/7/19 16:05
  • 上次更新2025/7/19 17:37:15
查看原帖
为什么第一个0的样例都过不了,求大佬
1052623
hao2230楼主2025/7/19 16:05
#include <bits/stdc++.h>
using namespace std;
int a1[2000], a2[2000], cnt[4000000], a3[4000000];
int main()
{
    // 333*22=333*2+333*20
    // 即cnt+=s1*s2[i]*10^i
    string s1, s2;
    getline(cin, s1);
    getline(cin, s2);
    if (s1 == "0" or s2 == "0")
    {
        cout << "0";
        return 0;
    }
    memset(a1, 0, sizeof(a1));
    memset(a2, 0, sizeof(a2));
    memset(cnt, 0, sizeof(cnt));
    for (int i = 0; i < s1.size(); i++)
    {
        a1[i] = s1[s1.size() - i - 1] - '0';
    }
    for (int i = 0; i < s2.size(); i++)
    {
        a2[i] = s2[s2.size() - i - 1] - '0';
    }
    for (int i = 0; i < s2.size(); i++)
    {
        // 乘法部分
        memset(a3, 0, sizeof(a3));
        for (int j = 0; j < s1.size(); j++)
        {
            a3[j + i] = a1[j] * a2[i];
        }
        for (int j = i; j < s1.size() + i + 1; j++)
        {
            if (a3[j] >= 10)
            {
                a3[j + 1] += a3[j] / 10;
                a3[j] %= 10;
            }
        }
        // 加到cnt中
        for (int j = 0; j < s1.size() + i + 1; j++)
        {
            cnt[j] += a3[j];
        }
        for (int j = 0; j < s1.size() + i + 3; j++)
        {
            if (cnt[j] >= 10)
            {
                cnt[j + 1] += cnt[j] / 10;
                cnt[j] %= 10;
            }
        }
    }
    int len = s1.size() + s2.size() - 1;
    if (cnt[len] == 0)
    {
        len--;
    }
    for (int i = len; i >= 0; i--)
    {
        cout << cnt[i];
    }
    return 0;
}
2025/7/19 16:05
加载中...