大数阶乘

思路:

     数组模拟阶乘的过程,处理好进位的问题与优化的问题即可。

代码一如下:

 

复制代码
 1 //大数阶乘
 2 #include<iostream>
 3 #include<cstring>
 4 #define N 17000  //此处只能计算到5000,如有需要,可以修改N
 5 using namespace std;
 6 void jiecheng(int n);
 7 int ans[N];
 8 int main()
 9 {
10   int n;
11   while(cin>>n)
12   {
13     jiecheng(n);
14   }
15 return 0;
16 }
17 
18 void jiecheng(int n)
19 {
20    int i,j,len,t,temp;
21    memset(ans,0,sizeof(ans));//初始化
22    ans[0]=1;
23    len=1;
24   for(i=2;i<=n;i++)
25   {
26        t=0;//进位的标志
27      for(j=0;j<=len;j++)//逐个相乘
28      {
29        temp=ans[j]*i+t;
30        ans[j]=temp%10;
31        t=temp/10;
32        if(j==len&&t!=0)//渐进式增加,可以减少循环的次数
33         len++;
34      }
35   }
int k=len;
 
while(ans[k]==0&&k>=0)--k;
36 for(i=k;i>=0;i--)//输出 37 cout<<ans[i]; 38 cout<<endl; 39 }
复制代码

代码二 (位压缩--5位)
 

复制代码
 1 #include<iostream>
 2  #include<cstring>
 3  #include<cstdio>
 4  #define N 10000
 5  
 6  using namespace std;
 7  
 8  int a[N];
 9  
10  int main()
11  {
12      int n,t,i,j,k;
13      while(cin>>n)
14      {
15          memset(a,0,sizeof(a));
16          a[0]=1;k=0;
17          for(i=2;i<=n;i++)
18          {
19              t=0;
20              for(j=0;j<=k;j++)
21              {
22                  a[j]=a[j]*i+t;
23                  t=a[j]/100000;
24                  a[j]=a[j]%100000;
25              }
26              if(t>0)
27              {
28                  k++;a[k]=t;
29              }
30          }
31          printf("%d",a[k]);
32          for(i=k-1;i>=0;i--)
33          {
34              printf("%05d",a[i]);
35          }
36          printf("\n");
37      }
38  }
复制代码

 

 

posted on   L_S_X  阅读(624)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
< 2012年7月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11

导航

统计

点击右上角即可分享
微信分享提示