大数阶乘

来源:互联网 发布:007支票打印软件 编辑:程序博客网 时间:2024/04/30 08:14
 时间限制:3000 ms  |           内存限制:65535 KB
难度:3
描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50
样例输出
30414093201713378043612608166064768844377641568960512000000000000

<pre name="code" class="html"><span style="font-size:18px;">思路:如果用普通的方法,此题肯定超时,我们不妨将得到的结果放在一个一维数组中,阶乘,我们一步一步的从2一直乘到N,把每一次求到的结果放在数组中,这样就不会出现内存泄漏和超时的问题了#include<stdio.h>#include<string.h>#define  Max 100001int a[Max]; int main(void){int i,j,lon;int temp,w,n;scanf("%d",&n);memset(a,0,sizeof(a));a[1]=1;lon=1;for(i=2;i<=n;i++){w=0;for(j=1;j<=lon;j++){temp=a[j]*i+w;a[j]=temp%10;w=temp/10;if(j>=lon&&w!=0){lon++;}}}for(j=lon;j>=1;j--){printf("%d",a[j]);}printf("\n");return 0;} </span>


 

 

 

 

 

 

 

0 0
原创粉丝点击