您的位置:首页 > 其它

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

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: