[蓝桥杯]阶乘计算
Description 输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。 Input 输入包含一个正整数n,n≤1000。 Output 输出n!的准确值。 Sample Input 10 Sample Output 3628800 More Info n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。 使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
高精X常数
#include<bits/stdc++.h> using namespace std; int n,a[1000000],l; void mul(int x) { for(int i=1;i<=l;++i) { a[i]*=x; a[i]+=a[i-1]/10; a[i-1]%=10; } while(a[l]>=10) { l++;a[l]+=a[l-1]/10; a[l-1]%=10; } } int main() { scanf("%d",&n); a[1]=1;l=1; for(int i=2;i<=n;++i) mul(i); for(int i=l;i>=1;--i) cout<<a[i]; return 0; }