进击吧!阶乘
给定一个整数N(0≤N≤10000),求取N的阶乘
输入描述:
多个测试数据,每个测试数据输入一个数N
输出描述:
每组用一行输出N的阶乘示例1
输入
1 2 3
输出
1 2 6
来源:牛客网链接:https://www.nowcoder.net/acm/contest/75/E
代码:
#include <stdio.h>
int fz[50000] = {0}, fac[50000] = {0}, n;
int main ()
{
while (~scanf("%d", &n))
{
if (n == 0)
{
printf("1\n");
continue;
}
fac[0] = 1;
int t;
for (int i = 1; i <= n; i++)
{
int count = 0;
int s = i;
while (s)
{
t = s % 10;
s = s / 10;
for (int j = 0; j < 50000; j++)
{
fz[j+count] = fz[j+count] + fac[j] * t;
}
count++;
}
for (int j = 0; j < 50000; j++)
{
if (fz[j] > 9)
{
fz[j+1] += fz[j]/10;
fz[j] = fz[j] % 10;
}
}
for (int j = 0;j < 50000; j++)
{
fac[j] = fz[j];
fz[j] = 0;
}
}
int i;
for(i = 49999 ; i > -1; i--)
{
if(fac[i]==0)
continue;
else
break;
}
for (; i >= 0; --i)
{
printf("%d", fac[i]);
}
printf("\n");
for (int i = 0; i < 50000; i++)
{
fac[i] = 0;
}
}
return 0;
}