[USACO3.2] 阶乘问题题解

题目描述

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

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

12 的阶乘最右边的非零位为 6。

写一个程序,计算 N (1≤N≤5×107) 阶乘的最右边的非零位的值。

注意:10,000,000! 的末尾有 2499999 个零。

输入格式

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

输出格式

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

输入输出样例

输入 #1复制

12

输出 #1复制

6

说明/提示

USACO Training Section 3.2

思路

记录10位即可。

代码见下

#include<bits/stdc++.h>
using namespace std;
long long n,m=1,mod=1e10;
int main(){
	cin>>n;
    m=1;
    for(int i=1;i<=n;i++){
        m*=i;
        while(m%10==0){
            m/=10;
        }
        m=m%mod;
    }
    cout<<m%10<<endl;
    return 0;
}

posted @ 2025-10-21 21:19  bz02_2023f2  阅读(8)  评论(0)    收藏  举报  来源