求助大佬们,不知道哪里错了 我随便用了几个数据 与 题解的答案是一样的

P1591 阶乘数码

我是大帅比ZED @ 2022-11-07 11:46:25

/*
  ·题目描述
  求 n! 中某个数码出现的次数。

  ·输入格式
  第一行为 t(t≤10),表示数据组数。
  接下来 t 行,每行一个正整数 n(n≤1000) 和数码 a。

  ·输出格式
  对于每组数据,输出一个整数,表示 n! 中 a 出现的次数。
 */
#include <stdio.h>
#include <string.h>
using namespace std;

int factorial[100001] = {0}, tem[5];//阶乘 n小于1000
int copy_fac[100001];//用来作为factorial的工具存储
int len1, len2 = 1;//len1是tem数组的长度 len2是阶乘的长度

void num_copy()
{
    for (int i=1; i<=len2; i++)
        factorial[i] = copy_fac[i];
    memset(copy_fac, 0, sizeof(copy_fac));
}

int main (void)
{
    int n;//n个数据
    scanf("%d", &n);

    for (int i=1; i<=n; i++)//循环n次
    {
        int x, a, count = 0;//x是到x的阶乘 a是阶乘中出现的数 count计数
        scanf("%d%d", &x, &a);//读入

        factorial[1] = 1;//初始化
        for (int j=2; j<=x; j++)//开始阶乘
        {
            len1 = j / 10 + 1;//如j是111 那么len1 = 2 + 1 = 3

            int t = j, count2 = 1; 
            while (t != 0)
            {
                tem[count2] = t % 10;
                t /= 10;
                count2++;
            }
            while (tem[len1] == 0)//去除前导零
                len1--;

            len2 += len1;//如99*99 = 9801 不超过2+2

            for (int i2=1; i2 <= len2; i2++)
            {
                for (int k=1; k<=len1; k++)//进行计算
                {
                    copy_fac[i2+k-1] += factorial[i2] * tem[k];
                    copy_fac[i2+k]   += copy_fac[i2+k-1]/10;//进位并累加
                    copy_fac[i2+k-1] %= 10;//留下当前位
                }
            }
            while(copy_fac[len2] == 0 && len2 > 0)//清除前导零
                len2--;
            num_copy();
        }

        /*for (int i=len2; i>0; i--)//测试阶乘对没有
            printf("%d", factorial[i]);*/

        for (int j2=len2; j2>0; j2--)
            if (factorial[j2] == a)
                count++;

        if (i != n)
            printf("%d\n", count);//输出结果
        else
            printf("%d", count);//输出结果
        memset(factorial, 0, sizeof(factorial));//清零
    }

    return 0;
}
/*
  测试:
  -----------------------------
  -----------------------------
  总结:

 */

也不知道是哪里错了, 我现在突然下不了数据,我也不知道哪里错了,然后随便捏造了几个数据,和题解比对,感觉没什么问题


|