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);
}

猜你喜欢

转载自blog.csdn.net/daimaliang/article/details/82287228
今日推荐