您的位置:首页 > 其它

大数阶乘

2017-02-08 00:00 183 查看

大数阶乘

http://acm.nyist.net/JudgeOnline/problem.php?pid=28

时间限制:3000 ms | 内存限制:65535 KB

难度:3

输入

输入一个整数m(0<m<=5000)

输出

输出m的阶乘,并在输出结束之后输入一个换行符

样例输入

50

样例输出

30414093201713378043612608166064768844377641568960512000000000000

描述

我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?

我的代码

#include <stdio.h>
//5000!大概是一万六千为左右
#define MAX 20000
char res[MAX];//char 本质上也是一个数字,可以运算,由于是全局变量,所以已经初始化为0
int main(int argc, char*argv[]){
int i, j = 0, n, digit = 0, t;//进位
scanf("%d", &n);
res[0] = 1;//阶乘由1开始,数字的低位在数组的下标低位
int length = 1;//数字长度为1
for (i = 2; i <= n; i++){//由2开始乘
digit = 0;
for (j = 0; j < length; j++){
t = res[j] * i + digit;
if (j == length - 1 && t >= 10) //如果数字的最高位还需进位,长度加一
length++;
digit = t / 10;
res[j] = t % 10;
}
}

//倒序输出
for (i = length - 1; i >= 0; i--)
printf("%d", res[i]);
printf("\n");
return 0;
}


题目推荐代码

#include <stdio.h>
#include <string.h>
const int maxn = 20000;
int a[maxn];
int main(){
int n, i, j, s, c;
scanf("%d", &n);
memset(a, 0, sizeof(a));
a[0] = 1;
for (i = 2; i <= n; i++){
c = 0;
for (j = 0; j <= maxn; j++){
s = a[j] * i + c;
a[j] = s % 10;
c = s / 10;
}
}
for (j = maxn; j >= 0; j--) if (a[j]) break;
for (i = j; i >= 0; i--) printf("%d", a[i]);
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: