大数阶乘
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,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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。