解题思路:
1.计算n的阶乘,n的最大值为10000,利用数组模拟来实现高精度的乘法,此题特别的是两个因数都会变化,所以要利用循环来枚举因数
2.开辟一个100000大小的int数组,因为数组中每一位数字都经过进位处理,所以利用因数乘9也不会超过整型的范围,所以因数可以直接乘数组中的数,不必再开数组
3.数组初始化a[1]=1,0的阶乘也是1,所以在1的基础上累乘,对每一位进行乘n后要加上前一位的进位,如果最高位任然是大于10的,需要开拓数组,增加数组的长度,下一次累乘的时候数组遍历的长度也要变化
4.记录k的值,从数组k的下标位置到1依次倒序输出
#include<bits/stdc++.h>
using namespace std;
int A[100000];
int main()
{
int n;
cin>>n;
int num=1,jin=0;
A[1]=1;//数组初始值为1
for(int i=2;i<=n;i++)
{
jin=0;//进位每次初始化为0
for(int j=1;j<=num;j++)
{
A[j]=A[j]*i+jin;//数组中的每一位都乘i+进位
jin=A[j]/10;//处理进位
A[j]=A[j]%10;//该位置上取余数
}
while(jin)//进位可能超过一位数,所以分别创建空间放进去数
{
num++;
A[num]=jin%10;
jin=jin/10;
}
}
for(int i=num;i>=1;i--)//倒序输出结果
cout<<A[i];
return 0;
}