记录编号 47627 评测结果 AAAAAAAAAA
题目名称 阶乘 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.434 s
提交时间 2012-11-02 16:59:24 内存使用 2.57 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. using namespace std;
  5.  
  6. struct bint
  7. {
  8. int len,num[10000];
  9. };
  10.  
  11. bint bchange(int num)
  12. {
  13. bint a={0};
  14. if (!num)
  15. {
  16. a.len=1;
  17. return(a);
  18. }
  19. while (num)
  20. {
  21. a.num[a.len++]=num%10;
  22. num/=10;
  23. }
  24. return(a);
  25. }
  26.  
  27. bint bmul(bint a,bint b)
  28. {
  29. bint c={0};
  30. int i,j,jin;
  31. c.len=a.len+b.len-1;
  32. for (i=0;i<a.len;i++)
  33. for (j=0;j<b.len;j++)
  34. c.num[i+j]+=a.num[i]*b.num[j];
  35. jin=0;
  36. for (i=0;i<=c.len;i++)
  37. {
  38. c.num[i]+=jin;
  39. jin=c.num[i]/10;
  40. c.num[i]%=10;
  41. }
  42. if (c.num[c.len])
  43. {
  44. c.len++;
  45. }
  46. return(c);
  47. }
  48.  
  49. int main(void)
  50. {
  51. freopen("fact4.in","r",stdin);
  52. freopen("fact4.out","w",stdout);
  53. int i,n;
  54. bint num=bchange(1);
  55. cin>>n;
  56. for (i=2;i<=n;i++)
  57. num=bmul(num,bchange(i));
  58. for (i=0;i<num.len;i++)
  59. if (num.num[i]!=0)
  60. {
  61. cout<<num.num[i]<<endl;
  62. break;
  63. }
  64. return(0);
  65. }