1024: 末位零

Time Limit: 1 Sec  Memory Limit: 32 MB
Submit: 60  Solved: 11
[Submit][Status][Web Board]

Description

给定一个正整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。

注意:N<=100,000,000

Input

第一行为N,表示有N个输入。接下来有N行,每一行包括一个正整数。

Output

对于每个输入,每行输出结果

Sample Input

2
5
10

Sample Output

1
2

求N的阶乘的末尾几个0,刚开始只知道出现2与5就会有0,后来百度一下发现只要是5的倍数均会+1,贴上原帖思路:

把从 1000 到 1 这些所有的数,只要是5的倍数的,一律分解成含因子5为止。

例如 
10 = 2 * 5

15 = 3 * 5

25 = 5 * 5

50 = 2 * 25 = 2 * 5 * 5

100 = 4 * 25 = 4 * 5 * 5

105 = 21 * 5

125 = 5 * 5 * 5 余此类推。
从1 到1000,能被5 整除的数有 1000/5 = 200 个 能被5的平方即25整除的数有 1000/25 = 40 个 能被5的立方即125整除的数有 1000/125 = 8 个
能被5的4次方即625 整除的数有 1000/625 = 1个 (即625自己) 
把这1000个数,只要能分解出因子5,就一直分解到因子5为止。共可分解出  200 + 40 + 8 + 1 = 249  即最终可分解出 249 个5。 
只要有1个5,与偶数相乘后就会出现1个0。 而 从1 到1000,偶数的数量是足够的,所以 有249个5,乘积结果中就有249个0。

由于数据比较大到10^8用longlong,又可以用到可爱的快速幂了,13次方显然没卵用- -|||.

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<set>
#include<map>
#include<sstream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
inline long long POW5(int b)
{long long r=1,bas=5;while (b!=0)//蛋疼b写成rWA了一次{if(b&1)r*=bas;bas*=bas;b>>=1;}return r;
}
int main (void)
{long long n,temp;int t;scanf("%d",&t);while (t--){scanf("%lld",&n);long long ans=0;for (int i=1; i<13; i++)//5的13次我用计算器算了一下大于10^8次了,直接到这够了{temp=POW5(i);//调试方便查看ans=ans+n/temp;}cout<<ans<<endl;}return 0;
}

转载于:https://www.cnblogs.com/Blackops/p/5356407.html

ACM程序设计选修课——1024: 末位零(求末尾0的方法+可有可无的快速幂)相关推荐

  1. 2015多校10 1006.CRB and Puzzle HDU5411(邻接矩阵求k长路条数,矩阵快速幂

    题意:有若干字符,现在要把它们连成一个字符串,每种字符后面只能接特定种类的字符,现在询问能连接出的长度小于等于m的字符串有多少种. 思路:我们可以把这个转移关系看成一个图,如果字符a后面可以接b,那么 ...

  2. ACM程序设计选修课——1036: Hungar的菜鸟赛季(YY)

    1036: Hungar的菜鸟赛季 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 20  Solved: 14 [Submit][Status][Web ...

  3. ACM程序设计选修课——1030: Hungar的时尚球场(水题+耐心)

    1030: Hungar的时尚球场 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 14  Solved: 8 [Submit][Status][Web ...

  4. 线性递推式+求第N项,用矩阵快速幂 如何构造初始矩阵

    转载于:https://www.cnblogs.com/lhclqslove/p/9438095.html

  5. 快速幂算法和大整数求模

    ** 1.快速幂的算法** (1)当我们求一个数的n次方的的结果时,若直接选择for循环,来累乘的话,效率很低,时间复杂度位O(n),而当我们选择快速幂来计 算时,时间复杂度能达到O(logn),快了 ...

  6. 【经典智力题】1024! 末尾有多少个0?——“计算阶乘末尾0的数量”问题引出

    网上有这样一个广为流传的有趣问题: 1024! 末尾有多少个0? 相应的解法是: 末尾0的个数取决于乘法中因子2和5的个数.显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数. 是5的倍 ...

  7. 利用矩阵快速幂求斐波那契数列

    我们知道如果用记忆化搜索逐项递推可以将复杂度降低到O(n),但是对于更大规模的输入,这个算法效率还是不够高,那么我们考虑更高效的算法: 二阶递推:f(n+2)=(1 1) f(n+1) f(n+1) ...

  8. 蓝桥杯 算法提高 递推求值(矩阵快速幂)详解

    传送门 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3 ...

  9. NYOJ 301 递推求值(矩阵快速幂)

    递推求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n ...

  10. ZYH的斐波那契数列【线段树动态开点+矩阵快速幂求斐波那契】

    描述 ZYH最近研究数列研究得入迷啦! 现在有一个斐波拉契数列(f[1]=f[2]=1,对于n>2有f[n]=f[n-1]+f[n-2]), 但是斐波拉契数列太简单啦,于是ZYH把它改成了斐波拉 ...

最新文章

  1. 第四次作业 结对编程-黄金点游戏
  2. Mvc 4.0实现Response.Write()效果
  3. 系统目录 linux命令,linux基础命令之系统目录(示例代码)
  4. dede后台文章无法编辑(出现空白)的解决办法
  5. 天涯明月刀服务器维护,天涯明月刀手游维护时间表一览,维护什么时候结束?[多图]...
  6. Windows常用密码的破解方法
  7. shell美元符_Linux Shell中的美元符号$ | 学步园
  8. jw player去掉logo 二次开发
  9. Mocha.js官方文档翻译 —— 简单、灵活、有趣
  10. 获取电信光猫超级密码 获取宽带账号密码 获取公网ip
  11. A19.从零开始前后端react+flask - 删除前后端数据
  12. WP免费主题,wordpress免费主题,WP建站主题
  13. 全国省市县信息sql脚本
  14. Linux文本处理三剑客(awk、grep、sed)
  15. C#.net 微信公众账号接口开发
  16. 盖茨和李嘉诚双龙卸甲 他们的区块链业务一个在链圈扶贫 一个在币圈赚钱
  17. Java-实现飞机躲子弹游戏
  18. 用java计算电阻,NTC热敏电阻计算公式
  19. python绘制横向柱状图 妈妈再也不用担心我不会画图了
  20. oracle审计查询sql语句,Oracle 数据库审计

热门文章

  1. 在论坛中出现的比较难的sql问题:14(存储过程问题)
  2. socket 关于同一条TCP链接数据包到达顺序的问题
  3. 51nod 1423 最大二“货” 单调栈
  4. 几种数据库快速csv入库方式整理
  5. 编写可维护的javascript代码--- 2015.11.21(基本格式化)
  6. 开发自己的博客转发插件(跨域)
  7. Hadoop只输出Key不输出Value的小技巧‏
  8. SQL安装过程中安装程序挂起问题解决
  9. vue-awesome-swiper 的安装和使用
  10. 调用天气接口获取天气预报