zoukankan      html  css  js  c++  java
  • USACO Section 3.2 Factorials (fact4)

    Factorials

    The factorial of an integer N, written N!, is the product of all the integers from 1 through N inclusive. The factorial quickly becomes very large: 13! is too large to store in a 32-bit integer on most computers, and 70! is too large for most floating-point variables. Your task is to find the rightmost non-zero digit of n!. For example, 5! = 1 * 2 * 3 * 4 * 5 = 120, so the rightmost non-zero digit of 5! is 2. Likewise, 7! = 1 * 2 * 3 * 4 * 5 * 6 * 7 = 5040, so the rightmost non-zero digit of 7! is 4.

    PROGRAM NAME: fact4

    INPUT FORMAT

    A single positive integer N no larger than 4,220.

    SAMPLE INPUT (file fact4.in)

    7
    

    OUTPUT FORMAT

    A single line containing but a single digit: the right most non-zero digit of N! .

    SAMPLE OUTPUT (file fact4.out)

    4
    
    思路:hdu上有比它更变态的题,给个网址,上面讲的很详细。
    http://blog.csdn.net/yibcs/article/details/8040862
    Executing...
       Test 1: TEST OK [0.000 secs, 3228 KB]
       Test 2: TEST OK [0.000 secs, 3228 KB]
       Test 3: TEST OK [0.000 secs, 3228 KB]
       Test 4: TEST OK [0.000 secs, 3228 KB]
       Test 5: TEST OK [0.000 secs, 3228 KB]
       Test 6: TEST OK [0.000 secs, 3228 KB]
       Test 7: TEST OK [0.000 secs, 3228 KB]
       Test 8: TEST OK [0.000 secs, 3228 KB]
       Test 9: TEST OK [0.000 secs, 3228 KB]
       Test 10: TEST OK [0.000 secs, 3228 KB]
    
    All tests OK.
     1 /*
     2 ID:wuhuaju2
     3 PROG:fact4
     4 LANG:C++
     5 */
     6 
     7 #include <cstdio>
     8 #include <iostream>
     9 #include <cstdlib>
    10 #include <algorithm>
    11 #include <cstring>
    12 using namespace std;
    13 
    14 const int x[]={6,6,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2};
    15 const int maxn=100;
    16 int a[maxn+10];
    17 char s[maxn];
    18 int n,t,l,e,beg,ans,tt;
    19 
    20 
    21 
    22 void close()
    23 {
    24     fclose(stdin);
    25     fclose(stdout);
    26     exit(0);
    27 }
    28 
    29 void work()
    30 {
    31 }
    32 
    33 void init ()
    34 {
    35 freopen("fact4.in","r",stdin);
    36 freopen("fact4.out","w",stdout);
    37     scanf("%s",s);
    38      l=strlen(s);
    39      if (l==1 && s[0]=='1')
    40      {
    41          cout<<1<<endl;
    42          close();
    43      }
    44      ans=1; int cnt=0;
    45      e=maxn; beg=e-l+1;
    46     // printf("e:%d beg:%d \n",e,beg);
    47      for (int i=l-1;i>=0;i--)
    48      {
    49          a[e-cnt]=s[i]-'0';
    50          cnt++;
    51      }
    52      while (beg<=e)
    53      {
    54          t=a[(e-1)] % 2 * 10+a[e];
    55          ans=(ans*x[t]) % 10;
    56          t=0;
    57          for (int i=e;i>=beg;i--)
    58          {
    59              t=a[i]*2 /10;
    60              a[i]=(a[i]*2+tt) % 10;
    61              tt=t;
    62          }
    63          if (t>=1)
    64          {
    65              beg--;
    66              a[beg]=1;
    67          }
    68          e--;
    69      }
    70      cout<<ans<<endl;
    71 }
    72 
    73 int main ()
    74 {
    75     init();
    76     work();
    77     close();
    78     return 0;
    79 }
  • 相关阅读:
    食物
    连在一起的幻想乡
    【XSY3209】RGB Sequence
    【Luogu4389】付公主的背包
    【BZOJ4555】【TJOI2016】【HEOI2016】求和
    【BZOJ3456】城市规划
    【BZOJ2693】jzptab & 【BZOJ2154】Crash的数字表格
    【Learning】左偏树
    小Z的袜子
    【BZOJ3625】【CF438E】小朋友和二叉树
  • 原文地址:https://www.cnblogs.com/cssystem/p/2886701.html
Copyright © 2011-2022 走看看