大数的阶乘

我们以1000为例,为了保存结果,需要先分析1000!有多大。大约为4*10的2567次方,因此可以用一个3000个的元素的数组f保存。为了方便进位,我们让f[0]保存各位,f[1]保存十位。。。。。。在输出时要忽略前导0。4!=24,那么从f[2]~f[1000]都为0需要忽略输出。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn=3000;
 7 int f[maxn];
 8 int main()
 9 {
10     int i,j,n;
11     while(cin>>n)
12     {
13         memset(f,0,sizeof(f));
14         f[0]=1;
15         for(i=2;i<=n;i++)
16         {
17             int c=0;
18             for(j=0;j<maxn;j++)
19             {
20                 int s=f[j]*i+c;
21                 f[j]=s%10;
22                 c=s/10;
23             }
24         }
25         for(j=maxn-1;j>=0;j--)
26         if(f[j])break;//忽略前导0
27         for(i=j;i>=0;i--)
28         cout<<f[i];
29         cout<<endl;
30     }
31     return 0;
32 }

 

转载于:https://www.cnblogs.com/WHLdbk/p/5745848.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值