代码AC但耗时1.26ms,别人都是300ms,请问为什么那么慢

P1591 阶乘数码

holy @ 2022-12-26 10:06:28

#include<iostream>
#include<stdio.h>//scanf()
#include<cstring>//memset(数组名, 0, sizeof(数组名))
using namespace std;

int m[10000];

int main()
{
    int i, j, t;
    cin>>t;//将输入t组数据
    int c = 0;//保留进位
    int sum = 0;//中间值, c, sum在for内初始化会累加
    for(int k = 0; k < t; ++k)//这里不要声明i, 会被下面的i干扰
    {
        memset(m,0,sizeof(m));//对数组m初始化,防止连续输入后累加
        int n, a;
        scanf("%d %d", &n, &a);//n表示n的阶乘
        m[0] = 1;
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓核心代码↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
        for(i = 2; i <= n; ++i)
            for(j = 0; j < 10000; ++j)
            {
                sum = c + m[j] * i;
                m[j] = sum % 10;//保留个位数
                c = sum / 10;//保留进位
            }
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑核心代码↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
        long long num = 0;//a出现的次数
        for(i = 10000; i >=0; --i)
            if(m[i] != 0)//数据开始出现
            {
                for(j = i; j >= 0; --j)
                    if(m[j] == a)
                        num++;
                break;//从a最后一个数输出到a[0]
            }
        cout<<num<<endl;
    }

    return 0;
}

by holy @ 2022-12-26 11:00:56

还以为代码本身有大问题


上一页 |