杭电acm1042

http://acm.hdu.edu.cn/showproblem.php?pid=1042

这题很有难度,对现在的自己而言。。。。因为比较大的数的阶乘结果即使longlong也是存不下的,所以用数组来做,可以每个位上存1位或者多位,先总的每个位上的元素乘上要计算的那个数,然后依次取模和进位,存储及进位到下一位。。。得到结果

View Code
 1 #include<stdio.h>
 2  int main()
 3  {
 4    int n,m,i,j,b;
 5    long a[100000];
 6    while(scanf("%d",&n)!=EOF)
 7    {
 8       
 9       a[0]=1;
10       m=1;
11       for(i=1;i<=n;i++)
12       {
13          b=0;
14          for(j=0;j<m;j++)
15          {
16            a[j]=a[j]*i+b;          
17            b=a[j]/10000;
18            a[j]=a[j]%10000;// 这里一个位上存储4位数,节省空间 ,相对的如果改成10,就是存一位了 
19          }
20          if(b>0)
21          {
22           a[m]=b;
23           m++;
24          }
25       }
26       printf("%ld",a[m-1]);//因为下面的输出模式 ,所以这边先把可能不满4位的输出 
27       for(i=m-2;i>=0;i--)
28       {
29         printf("%4.4ld",a[i]);//
30       }
31       printf("\n");
32    }
33    return 0;
34  }

 

转载于:https://www.cnblogs.com/huzhenbo113/articles/2990824.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值