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到最大值进行不断相乘,当循环变量等于输入的某个数时,即输出相应的阶乘值。这样可以少乘很多次。