阶乘
问题描述
输入一个正整数n,输出n!的值。
其中n!=1*2*3*…*n。
其中n!=1*2*3*…*n。
算法描述
n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入格式
输入包含一个正整数n,n<=1000。
输出格式
输出n!的准确值。
样例输入
10
样例输出
3628800
//模拟计算过程即可
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int n; 5 cin>>n; 6 int s[10001]={0}; 7 s[0]=1; 8 int p,q; 9 for(int i=2;i<=n;i++){ 10 //每位相乘 11 for(int j=0;j<10000;j++){ 12 s[j]=s[j]*i; 13 } 14 //进位 15 for(int j=0;j<10000;j++){ 16 p=s[j]%10; 17 q=s[j]/10; 18 s[j+1]=s[j+1]+q; 19 s[j]=p; 20 } 21 } 22 int h=10000; 23 while(s[h]==0)h--; 24 for(int i=h;i>=0;i--){ 25 cout<<s[i]; 26 } 27 cout<<endl; 28 return 0; 29 }
转载请标明出处