首页 > 其他 > 详细

高精阶乘

时间:2015-03-10 22:46:54      阅读:375      评论:0      收藏:0      [点我收藏+]

求n!。当n很大的时候,会超出整数的范围。

这里用数组来进行高精阶乘。a[1]是个位,a[2]是十位......依次类推。每次要乘一个数的时候,就从个位(即a[1])开始乘这个数,>10的时候要%10再进位。

 

 1 #include<cstdio>
 2 #include<cstring>
 3 const int N=100000;
 4 
 5 int a[N];
 6 int i, j, n;
 7 int t, pos/*位数*/, carry/*进位*/;
 8 
 9 int main()
10 {
11     while(scanf("%d", &n)==1)
12     {
13         memset(a, 0, sizeof(a));
14         a[1]=1;
15         pos=1;
16         carry=0;
17 
18         for(i=2; i<=n; i++)
19         {
20             for(j=1; j<=pos; j++)
21             {
22                 t=a[j]*i+carry;
23                 a[j]=t%10;
24                 carry=t/10;
25             }
26             while(carry)
27             {
28                 t=carry;
29                 pos++;
30                 a[pos]=t%10;
31                 carry=t/10;
32             }
33         }
34 
35         for(i=pos; i>=1; i--)
36             printf("%d", a[i]);
37         puts("");
38     }
39     return 0;
40 }

 

高精阶乘

原文:http://www.cnblogs.com/qyy-goodluck/p/4328405.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!