POJ 1604 Just the Facts 阶乘最后非0位

来源:互联网 发布:java bigdecimal 加 编辑:程序博客网 时间:2024/05/16 07:59


#include<cstdio>int get2 ( int n ){    if ( n == 0 )        return 0;    return n/2 + get2(n/2);}int get5 ( int n ){    if ( n == 0 )        return 0;    return n/5 + get5(n/5);}int g ( int n, int x ){    if ( n == 0 )        return 0;    return n/10 + ( n%10 >= x ) + g(n/5,x);}int getx ( int n, int x ){    if ( n == 0 )        return 0;    return getx ( n/2, x ) + g ( n, x );}int table[4][4] ={    6,2,4,8, // 2的循环节。2^0 = 1,需要特殊处理。    1,3,9,7, // 3    1,7,9,3, // 7    1,9,1,9,  // 9};int main(){    int n;    while ( scanf("%d",&n) != EOF )    {        int num2 = get2(n);        int num5 = get5(n);        int num3 = getx(n,3);        int num7 = getx(n,7);        int num9 = getx(n,9);        int res = 1;        if ( num5 > num2 )        {            printf("5\n");            continue;        }        else        {            if ( num5 != num2 )            {                res *= table[0][(num2-num5)%4];                res %= 10;            }            res *= table[1][num3%4];            res %= 10;            res *= table[2][num7%4];            res %= 10;            res *= table[3][num9%4];            res %= 10;        }        printf("%5d -> %d\n",n,res);    }    return 0;}


原创粉丝点击