POJ 1401&&NYOJ 954 N!
2015-09-13 21:45
357 查看
分析:
组合数学问题,这两道题是类似的,分别是求N!的末尾有几个0和N!的二进制表示低位最近的1的位置(即末尾二进制0的个数+1)
首先来谈下POJ1401,
1)求0的个数即是求2*5的个数
2)2必然多于5,直接求解5的个数即可
3)核心点:任意一个数都可能包含一定的5因子,比如3是0个,10是1个,100是2个(5*5*4)......,那么为找出这所有的5因子,我们可以利用循环的方式求解,即F(N)=N/5+F(N/5).100!的话sum=100/5+20/5+4/5+0/5=24
同理,二进制表示中0的个数即为2因子的个数,在0个数的基础上+1即可。
POJ 1401
组合数学问题,这两道题是类似的,分别是求N!的末尾有几个0和N!的二进制表示低位最近的1的位置(即末尾二进制0的个数+1)
首先来谈下POJ1401,
1)求0的个数即是求2*5的个数
2)2必然多于5,直接求解5的个数即可
3)核心点:任意一个数都可能包含一定的5因子,比如3是0个,10是1个,100是2个(5*5*4)......,那么为找出这所有的5因子,我们可以利用循环的方式求解,即F(N)=N/5+F(N/5).100!的话sum=100/5+20/5+4/5+0/5=24
同理,二进制表示中0的个数即为2因子的个数,在0个数的基础上+1即可。
POJ 1401
#include <cstdio> int n, t; int main() { scanf("%d", &t); while (t--) { scanf("%d", &n); int sum = 0; while (n != 0) { sum += n / 5; n /= 5; } printf("%d\n", sum); } return 0; }
相关文章推荐
- TCP协议三次握手
- Eclipse下搭建Maven框架
- 求某个数的位数公式
- iOS中读取Cell的两种方式(资源包种加载Cell,从nib文件中注册cell)和xib知识点
- Android 遍历全国地区位置(一)
- centos下安装nginx和php-fpm
- Leetcode: Remove Element
- Computer Code Elements & comments
- jQuery与原生js的函数对比
- apache设置目录访问权限
- Java学习笔记---设计模式之抽象工厂模式
- ssh实现clob存储大文本数据
- Linux下恢复删除的文件
- 他弄丢了这辈子最爱的姑娘
- c++字符串操作函数
- jQuery与原生js的函数对比
- Unity中 yield return 1 的误区
- TabControl使用
- 多线程在Android中的应用以及线程间的通信
- [前端] nodejs之express框架和ejs模板引擎的入门