首页 > 其他 > 详细

大数阶乘

时间:2015-06-21 15:41:02      阅读:133      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!