思路就是模拟手算,一步一步乘上去。每乘进去
一个i,就从a0开始更新每个点。用c保存进位。每次更新就是用当前这个点的值乘新进入的i再
加上上
一个点留下来的进位C。开始没想出来原因就是觉得每次乘都要从头开始更新节点太麻烦会超时,但事实证明我想多了= =
#include
int main()
{
int a[17000] = {0},s,c,i,j,m;
scanf("%d",&m);
a[0] = 1;
for(i = 2 ; i <= m ; i++)
{
c = 0;
for(j = 0 ; j < 17000 ; j++)
{
s = a[j] * i + c;
a[j] = s % 10 ;
c = s / 10;
}
}
for(i = 17000 - 1 ; i >= 0 ; i--)
if(a[i])
break;
for(; i >= 0 ; i--)
printf("%d",a[i]);
printf("\n");
return 0;
}