用大数模板,加法转乘法超时了,然后用二进制压缩又失败了。。
最后用与1250类似的办法拼凑
#include <iostream>
using namespace std;
int num[8000];
int main()
{
int i , j, n, t , carry;
while(scanf("%d", &n)!= EOF)
{
if (n == 0)
{
printf("1\n");
continue;
}
memset(num, 0, sizeof(num));
t = 1; //位数
num[1] = 1;
for (i = 2 ; i <= n; i++)
{
carry = 0;
for (j = 1; j <= t; j++)
{
num[j] = num[j] * i + carry;
carry = num[j] / 100000;
num[j] = num[j] % 100000;
}
while (carry) //进位使得位数增加
{
t++;
num[t] = carry % 100000;
carry /= 100000;
}
}
printf("%d", num[t]);
for (i = t - 1; i >= 1; i--)
{
printf("%05d", num[i]); //格式化输出, 补前导0
}
printf("\n");
}
return 0;
}