代码AC但耗时1.26ms,别人都是300ms,请问为什么那么慢
  • 板块P1591 阶乘数码
  • 楼主holy
  • 当前回复11
  • 已保存回复11
  • 发布时间2022/12/26 10:06
  • 上次更新2023/10/24 06:35:38
查看原帖
代码AC但耗时1.26ms,别人都是300ms,请问为什么那么慢
245579
holy楼主2022/12/26 10:06
#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;
}
2022/12/26 10:06
加载中...