码迷,mamicode.com
首页 > 其他好文 > 详细

大数阶乘

时间:2015-06-21 15:43:35      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

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

 
输入:输入一个整数m(0<m<=5000)
输出:输出m的阶乘,并在输出结束之后输入一个换行符
样例输入:50
样例输出:30414093201713378043612608166064768844377641568960512000000000000
博主分析:本题看上去似乎很简单,操作起来有点麻烦,而且要注意一些细节·,因为5000的阶乘太大了,所以不能当作一个数输出,可以类似的换算进制,
              这里我用了10000进制,用数组表示每一位的·数,就容易处理了,而且要注意阶乘到哪个位置终止,
参考代码:
    
#include<stdio.h>
#include<math.h>
int a[6800];
int wu(int j)//判断要用到的数组个数
{
int i,s;s=j;
for(i=0;i<1000;i++)
if(a[j+i+1]!=0)
break;
if(i==1000)
return(0);
else return(1);

}
int bei(int n,int j,int c)//利用递归原理对每一位进行计算
{
int m,i,k;
a[j]=a[j]*n+c;
c=a[j]/10000;
a[j]=a[j]%10000;
if(wu(j)||c!=0)
return(bei(n,j+1,c));
else return(j);
}
main()
{
int i,j,k,m;
scanf("%d",&m);
a[0]=1;
for(i=1;i<=m;i++)
k=bei(i,0,0);
printf("%d",a[k]);
for(i=k-1;i>=0;i--)//输出要相应的补零
{if(a[i]<10000&&a[i]>999)
printf("%d",a[i]);
else if(a[i]<1000&&a[i]>99)
printf("0%d",a[i]);
else if(a[i]<100&&a[i]>9)
printf("00%d",a[i]);
else
printf("000%d",a[i]);}
putchar(‘\n‘);



}


大数阶乘

标签:

原文地址:http://www.cnblogs.com/beike303603/p/4591928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!