c语言程序运行超时怎么办

pta显示运行超时,但在VC6.-上可以运行

这是题目:题目描述
给你一个正整数,你能算出它的阶乘是多少吗?

输入描述:
若干行,每行一个整数n(1<=n<=20)。

输出描述:
按顺序输出每个整数的阶乘,一个结果占一行
这是我写的程序:

#include<stdio.h>
int sh(int i)
{
    int j=1,k;
    for(k=i;k>=1;k--)
        j=j*k;
    return j;
}
int main()
{
    int a[100],i=1,b;
    char ch;
    do
    {
        scanf("%d",&a[i++]);
    }while((ch=getchar())!= ' ');
    for(b=1;b<i;b++)
    {
      printf("%d\n",sh(a[b]));
    }
}

运行结果及报错内容

结果正常 但pta显示运行超时

我的解答思路和尝试过的方法


我想要达到的结果

你用int类型肯定是装不下的。

#include<stdio.h>
long long sh(int i)
{
    int j=1,k;
    for(k=i;k>=1;k--)
        j=j*k;
    return j;
}
int main()
{
    int a[100],i=1,b;
    while(scanf("%d",&a[i++])!=EOF);
    for(b=0;b<i-1;b++)
    {
      printf("%lld\n",sh(a[b]));
    }
}

如果每个数独立进行阶乘超时,那你应该对输入多个数进行从小到大排序,然后定义一个long long 型作为结果,用for循环从1到最大值进行不断相乘,当循环变量等于输入的某个数时,即输出相应的阶乘值。这样可以少乘很多次。