张学友演唱会优酷:c语言的题目,编写求n!值的程序,用TC。。

来源:百度文库 编辑:高考问答 时间:2024/04/28 18:25:44
tc

当n稍微大点时,楼上的方法会发生”溢位overflow”错误!
给你个求大数阶乘的方法:
#include<math.h>
#include<stdio.h>
int main()
{
long i;
double ln=0;
printf("\nInput n=");
scanf("%d",&n);
for(i=1;i<=n;i++)
ln+=log10(i);
i=(long)ln;ln=pow(10,ln-i);
printf("n!=%lf*10^%ld\n",ln,i);
return 0;
}
编程爱好者群:24410693 只要对c有兴趣就可以申请加入本群.

int fun1(int n)
{
int i,s=1;
for(i=1;i<=n;i++)s*=i;
return s;
}

void main()
{
int n;
scanf("%d",&n);
printf("%d",fun1(n));
}
==================
我在写这段程序的时候也清楚如果测试数据稍微大些会产生OVERFLOW,但我还是这么写了
因为这么简单的题目测试用例一般不会很大
如果稍微严密一点,可以把fun1的函数类型和s改成long类型,主函数里的显示方式也改成%ld
另外,反对用递归!程序在执行时太低效,仅仅是代码上的简单。

用递归!

fac(int n)
{
if(n==1) s=1;
else return n*fac(n-1);
}
main()
{
long s=fac(n);
printf("%ld",s);
}