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

51nod 1057 N的阶乘

时间:2016-08-17 21:02:06      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

题目传送门

大数的乘法。

对这个超级大的数进行了切分,具体切成多宽的看个人爱好,只要能够用几个数据类型装下来就好,这里我们划分成了8个的宽度,每八位存一下,最后再进行格式化输出,巧妙的避开了爆数据范围的问题。c和进位相关,m和切的段数相关。

 

 1 #include <iostream>  
 2 #include <algorithm>  
 3 #include <cstdio>  
 4 #include <cstring> 
 5 using namespace std;  
 6 #define MAX 100000000
 7 long long a[10005];
 8 main()
 9 {
10     int n,i,j,m,c;
11     scanf("%d",&n);
12     a[0]=1;
13     m=0;
14     for(i=1;i<=n;i++)
15     {
16         c=0;
17         for(j=0;j<=m;j++)
18         {
19             a[j]=a[j]*i+c;
20             c=a[j]/MAX;
21             a[j]=a[j]%MAX;
22         }
23         if(c>0)
24         {
25             m++;
26             a[m]=c;
27         }
28     }
29     printf("%lld",a[m]);
30     for(i=m-1;i>=0;i--)
31     printf("%0.8lld",a[i]);
32 }

 

51nod 1057 N的阶乘

标签:

原文地址:http://www.cnblogs.com/CrazyBaby/p/5781743.html

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