天天看點

USACO 階乘

        題目連結:​​階乘​​

#include <bits/stdc++.h>

using namespace std;

int n,sum1,sum2;

int cal(int x){
    while(x%2 == 0){
        sum1++;
        x/=2;
    }
    while(x%5 == 0){
        sum2++;
        x/=5;
    }
    return x;
}

int quick_pow(int a,int b){
    int ans = 1;
    while(b){
        if(b&1) ans = (ans*a)%10;
        a = (a*a)%10;
        b>>=1;
    }
    return ans;
}

int main(){
    ios::sync_with_stdio(false);
    while(~scanf("%d",&n)){
        sum1 = sum2 = 0;
        int p = 1;
        for(int i = 1;i <= n;i++)
            p *= cal(i),p %=10;
        int ans = (quick_pow(2,sum1-sum2)*p)%10;
        printf("%d\n",ans);
    }
    return 0;
}