NYOJ 28 大数阶乘

来源:互联网 发布:网络嗅探器 编辑:程序博客网 时间:2024/06/18 16:04


大数阶乘

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


用数组逆序保存阶乘结果,5000的阶乘在计算器上算不出来,但位数不会超过30000。两层for循环,外层是从2到m,里层进行对每个数的大数乘法运算。输出时排除前导0,逆序输出即阶乘结果。

代码:

#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int a[30000];int main(){int m;scanf("%d",&m);memset(a,0,sizeof(a));a[0] = 1;for(int i = 2;i <= m;i++){int c = 0;for(int j = 0;j < 30000;j++){int s = a[j] * i + c;a[j] = s % 10;c = s / 10;}}int flag = 0;for(int j = 30000 - 1;j >= 0;j--){if(a[j] != 0)flag = 1;if(flag)printf("%d",a[j]);}printf("\n");return 0;} 


0 0
原创粉丝点击