1. 程式人生 > >USACO 3.2 Factorials 我居然一下過了(USACO最水題)

USACO 3.2 Factorials 我居然一下過了(USACO最水題)

題目大意是求n!的從右邊數第一個非零數字

 

做法是,對於每次乘的結果把結尾的零都去掉(利用不斷除10),然後取最低的幾位(利用%100000),最後輸出結果的個位。

這怕是USACO上程式碼最短的一道題了吧

/*
ID: 15659801
LANG: C
TASK: fact4
*/
#include <stdio.h>
#include <stdlib.h>

int main ()
{
    freopen ("fact4.in", "r",stdin);
    freopen ("fact4.out", "w",stdout);
    
    int i,n,ans=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        ans*=i;
        while(ans%10==0)
            ans/=10;
        ans%=10000;
    }
    printf("%d\n",ans%10);
    
    fclose(stdin);
    fclose(stdout);
    exit (0);
}