题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=954
计算N!的二进制表示最低位的1的位置,也即是求N!的阶乘中有多少个质因子2,
即:
while(N)
{
N = N>>1;
res += N;
}
因为[N/2]表示1····N中贡献2的个数,[N/2^2]表示1·····N中2^2又贡献一个2的个数····
即为本题的算法!
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int N, res;
while(~scanf("%d", &N))
{
res = 0;
while(N)
{
N = N>>1;
res += N;
}
printf("%d\n", res+1);
}
return 0;
}