过样例但爆0 求dalao帮帮忙

P1591 阶乘数码

yzsy25071621 @ 2023-03-18 12:28:24

这是为什么!我辛辛苦苦打了15分钟 \displaystyle \frac{1}{96}

#include <iostream>

using namespace std;

void multi(int);

int a[10001],n,x,l=1;

int main()
{
    int s=0,t=0,m=0;
    cin>>t;
    for(int i=1; i<=t; i++)
    {
        s=0;
        cin>>n>>m;
        multi(n);
        for(int j=1; j<=l; j++)
        {
            if(a[j]==m)
            {
                s++;
            }
        }
        cout<<s<<endl;
    }
    return 0;
}

void multi(int n)
{
    a[1]=1;
    for(int i=1; i<=n; i++)
    {
        x=0;
        for(int j=1; j<=l; j++)
        {
            a[j]=a[j]*i+x;
            x=a[j]/10;
            a[j]%=10;
            if(x>0 && j>=l)
            {
                l++;
            }
        }
    }
    return;
}

全部WA...救救孩子吧


by dingding2008 @ 2023-05-13 21:00:41

竟然没人回复! 你的代码有点奇怪,我这道题做出来了,我的思路是:定义一个数组大小为3010(我搜过)可以在输入的时候遍历1~n,每次乘起来,运算完清空,数组开头变为一,因为0乘任何数=0,最开始也要赋值为1,每一次运算完阶乘长度(len)设为一. 乘法高精度: 用一个len统计长度,for一遍,遍历每一个位置,由于是高精度乘低精度,所以高精度数组每一个位置都乘上低精度,最后处理进位:下一位加上当前的这一位/10,当前数位%10.while循环:如果末尾>=10,末尾的下一位+=当前位%/10.当前位%=10;长度++;


by dingding2008 @ 2023-05-13 21:01:07

如果还不懂,可以私信我


|