计算阶乘 C语言高手请进!

来源:百度知道 编辑:UC知道 时间:2024/05/22 12:42:48
求N的阶乘
变量条件:N为正整数,且N≤1000。
运行时限:1秒/测试数据。
输入格式:仅一个数,N。
输出格式:仅一个数,N!的结果。
请大家注意了,这里的N是不超过1000的数,32位整数能表示的最大数也顶多是13的阶乘,再往上就溢出了,即使用64位也不行,毕竟N可能会很大

1楼写到太麻烦了
为了保证位数够,我只定义了20000位,求10000!应该都够了

#include <stdio.h>
int main()
{
int n = 1;
scanf("%d",&n);
int a[20000];
int carry;
int i;
int digit = 1;
a[0] = 1;
int temp;
for(i = 2; i <= n; ++i)
{
carry = 0;
for(int j = 1; j <= digit; ++j)
{
temp = a[j-1] * i + carry;
a[j-1] = temp % 10;
carry = temp / 10;
}
while(carry)
{
a[++digit-1] = carry % 10;
carry /= 10;
}
}
for(i = digit; i >=1; --i)
{
printf("%d",a[i-1]);
}
printf("\n");
n++;
return 0;
}

#include <stdio.h>
long fun(int n)
{
if (n>1)
return (n*fun(n-1));
else
return 1;
}
int main()
{
int i;
scanf("%d",&i);
printf("%ld", fun(i));
}

只会简单一些的,同 自由骑士1