大数阶乘

来源:互联网 发布:人工智能导论教学大纲 编辑:程序博客网 时间:2024/05/16 08:03

大数阶乘

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50
样例输出
30414093201713378043612608166064768844377641568960512000000000000

模拟手算的过程,每次乘法都是先把每位都乘这个数,然后记录在当前的位置,最后都乘完了在循环一次一起进位

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;#define MAXN 2000int main(void){ //freopen("题.txt", "r", stdin);int n;scanf("%d", &n);int arr[MAXN + 1];memset(arr, 0, sizeof(arr));arr[0] = 1;int c;int i, j;for( i = 2; i <= n; i++){c = 0;for( j = 0; j <= MAXN; j++){arr[j] = arr[j] * i + c;c = arr[j] /10;arr[j] %= 10;}} for( i = MAXN; i >= 0; i--){if(arr[i] != 0){ break;}}for(j = i; j >= 0; j--){printf("%d", arr[j]);}printf("\n");    return 0;}


0 0