zoukankan      html  css  js  c++  java
  • P1134 阶乘问题

    P1134 阶乘问题

    题意 : 求出 (n!) 去掉后导 (0) 之后的最后一位

    Solution

    首先后导 (0) 最简单是由 (2 * 5) 得来的
    于是想到一个骚操作, 先把每个数的 (2, 5) 提出来, 一对一对地消掉, 就把后导 (0) 去掉了
    因为在 (1-n) 中因子 (2) 一定比 (5) 多, 所以最后让 2 的个数减去 5 的个数
    然后对于剩下的 (2) 不想写快速幂
    发现只用保留最后一位, 然后最后一位以 (4) 为周期反复
    于是就 (A)

    Code

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<cstring>
    #include<algorithm>
    #include<climits>
    typedef long long LL;
    using namespace std;
    int RD(){
        int out = 0,flag = 1;char c = getchar();
        while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
        while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
        return flag * out;
        }
    int n, ans = 1;
    int num5, num2;
    int change(int x){
    	while(x % 5 == 0)num5++, x /= 5;
    	while(x % 2 == 0)num2++, x /= 2;
    	return x;
    	}
    int last[4] = {6, 2, 4, 8};
    int main(){
    	n = RD();
    	for(int i = 1;i <= n;i++){
    		ans = (ans * change(i)) % 10;
    		}
    	num2 -= num5;
    	ans = (ans * (last[num2 % 4])) % 10;
    	printf("%d
    ", ans);
    	return 0;
    	}
    
  • 相关阅读:
    权限认证机制
    在线工具统计
    Redis内存模型
    Redis数据结构
    开发工具清单
    MySql数据库优化、备份和恢复
    MySql 性能优化神器 Explain
    ASP.NET Core 3.1 迁移到 NET 5.0
    MySql Sql语句
    DTU的通讯工作模式有哪些
  • 原文地址:https://www.cnblogs.com/Tony-Double-Sky/p/9520367.html
Copyright © 2011-2022 走看看