乘法高精度求调

P1303 A*B Problem

jiangmuran @ 2023-06-12 14:19:11

RT,第五个点死活过不去

https://www.luogu.com.cn/record/112580517

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

int main()
{
    int a[2005]={},b[2005]={},c[2005]={};
    string sa,sb;
    cin >> sa >> sb;
    for (int i=sa.length()-1,j=0;i>=0,j<=sa.length()-1;i--,j++)
    {
        a[j]=sa[i]-'0';
    }
    for (int i=sb.length()-1,j=0;i>=0,j<=sb.length()-1;i--,j++)
    {
        b[j]=sb[i]-'0';
    }
    int len=sa.length()+sb.length();

    for (int i=0;i<sa.length();i++)
    {
        for (int j=0;j<sb.length();j++)
        {
            c[i+j]+=a[i]*b[j];

        }
    }   

    for (int i=0;i<len;i++)
    {
        c[i+1]=c[i]/10+c[i+1];
        c[i]=c[i]%10;

    }

    for (;!c[len];)
    {

        len--;
    }
    len++;
    if(len <= 0)
    {
        len=1;
    }

    for (int i=len-1;i>=0;i--)
    {
        cout << c[i];
    }

}

by MuRongzhang @ 2023-06-12 14:47:37

根据上面的代码,c 的某一位可能会因为超过 99 从而导致进位没进完。


by jiangmuran @ 2023-06-12 15:13:08

@MuRongzhang 能具体讲一下吗,谢谢 本人小学蒟蒻,刚刚偷偷来刷题 没听懂、、、


by MuRongzhang @ 2023-06-12 16:25:45

@ben_ren_yi_tui_gu 刚才的没看懂也没关系,因为我看了一下问题,不是刚才想的那种。你可以试着把数组开到 main 函数外面(因为函数里面开数组初始化的时候里面的元素是多少谁都不知道)。


by jiangmuran @ 2023-06-12 17:52:12

@MuRongzhang我初始化了阿,我刚刚从新交了以下,第五个点成RE了


by jiangmuran @ 2023-06-12 19:31:35

@MuRongzhang 我的问题找到了,c数组开小了,至少开4005个


by MuRongzhang @ 2023-06-12 20:02:26

啊这……本人fw的事实暴露了()


|