阶乘问题 n!后最右边非0的数

 阶乘问题

时间限制: 1 Sec  内存限制: 128 MB
提交: 66  解决: 13
[提交][状态][讨论版]

题目描述

也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:
    12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 = 479,001,600
12的阶乘最右边的非零位为6。
    写一个程序,计算N(1<=N<=50,000,000)阶乘的最右边的非零位的值。
注意:10,000,000!有2499999个零。

输入

仅一行包含一个正整数N。

输出

单独一行包含一个整数表示最右边的非零位的值。

样例输入

12

样例输出

6

#include <cstdio>
#include <algorithm>
#define ll long long
#define maxn 800010
#define lson l,m,rt<<1
#define rson m+1,r,rt<< 1 | 1
using namespace std;
int s[100];
int main(){
    int num,n,add,pai[4]={6,2,4,8};
    while(~scanf("%d",&n)){
        num=n;
        add=0;
        while(num){
            if(num%5==2){
                add+=1;
            }
            else{
                if(num%5==4)
                    add+=2;
            }
            add+=num/5;
            num/=5;
        }
        if(n>1){
            printf("%d\n",pai[add%4]);
        }
        else printf("1\n");
    }
}

 

posted on 2016-08-11 22:01  acmtime  阅读(1025)  评论(0编辑  收藏  举报

导航