P1134 阶乘问题

题目描述

也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:

12!= 1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 7 \times 8 \times 9 \times 10 \times 11 \times 12 = 479,001,60012!=1×2×3×4×5×6×7×8×9×10×11×12=479,001,600

1212的阶乘最右边的非零位为66。

写一个程序,计算N(1 \le N \le 50,000,000)N(1≤N≤50,000,000)阶乘的最右边的非零位的值。

注意:10,000,000!10,000,000!有24999992499999个零。

输入输出格式

输入格式:

 

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

 

输出格式:

 

一个整数,表示最右边的非零位的值。

 

输入输出样例

输入样例#1: 复制

12

输出样例#1: 复制

6

说明

USACO Training Section 3.2

题解:模拟阶乘,只需保留后面几位数即可,然后最后的时候输出最后一位,如果只考虑最后一位,会对阶乘的最后一位有影响

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>


using namespace std;

int main()
{
     int n;
     cin>>n;
     long long int  s=1;
     int m;
     for(int t=1;t<=n;t++)
     {
     	m=t;

        m=m%100000000;
    	s=s%100000000;
        s=m*s;
        while(s%10==0) s/=10;
//		cout<<"m "<<m<<"s "<<s<<endl;
     } 

     cout<<s%10<<endl;
    return 0;
}

 

posted @ 2018-11-29 12:16  black_hole6  阅读(206)  评论(0编辑  收藏  举报