题目描述:
求10000以内n的阶乘。
输入:
只有一行输入,整数n(0≤n≤10000)。
输出:
一行,即n!的值。
输入样例:
4
输出样例:
24
做题思路:
阶乘涨的非常快,从100的阶乘要远大于10的100次方就可以看出来,所以这道题肯定是要用到高精度算法。和我们上次讲的2的n次方很像,本质上就是一个单精度乘高精度的做法。还是一样的套路,倒序存放整数,从左到右计算,将1~n依次去乘大整数的各个位数。因为位数会随着计算不断变化,所以需要定义一个变量来存放每次运算后的位数。最后倒序输出就是结果。
具体代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[100000]={0};
a[0]=1;//初值为1
int m=1;//整数的位数,初始值为1
for(int i=2;i<=n;i++){
int jw=0;//存储进位
for(int j=0;j<m;j++){//倒序存放整数,从左到右计算
int t=jw+a[j]*i;
a[j]=t%10;
jw=t/10;
}
while(jw){//若最后一位进位不为0
a[m++]=jw%10;
jw=jw/10;
}
}
for(int i=m-1;i>=0;i--){
cout<<a[i];//倒序输出
}
}