1057 N的阶乘(51NOD基础题)
1057 N的阶乘(51NOD基础题)
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
输入N求N的阶乘的准确值。
Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Input示例
5
Output示例
120
思路:由于最终结果比较大正常的 LL 肯定是不行的 , 所以仿照 10 进制数 构造出 10000 进制数 , 对万进制数的操作仿照十进制
#include <cstdio> #include <cstring> #define maxn 10000*5+5 int a[maxn] = {0 , 1} ; //a[0] == 0 , a[1] == 1 , a[n] == 0 ; int len ; int n ; void solve(int num ){ int up = 0 ; for(int i=1 ; i<=len ; i++){ up = a[i] * num + up ; // a[i] = up % 10000 ; //求出当前万进制的数字 up = up / 10000 ; // 当前万进制数字进位 } if(up != 0){//每次乘数结束后存在进位 才会增加万进制数的长度 a[++len] = up ; } } int main(){ while(~scanf("%d" , &n)){ len = 1 ; for(int i=1 ; i<=n ; i++){ solve(i) ; } printf("%d" , a[len]) ; for(int i=len - 1 ; i>0 ; i--){ printf("%04d", a[i]) ; } printf("\n") ; } return 0 ; }