如果N!的二进制中末尾是1,那么它就不能整除2,对应的位置是1;
如果N!的二进制中最末尾是0的话,它就可以整除2,所以问题就可以转化为求N!二进制含有多少个质因数2
就像就N!中含有5个数一样,n/5,n/5/5.。。。。
#include <iostream>
using namespace std;
int main() {
int n;
while(scanf("%d",&n)!=EOF)
{
int ans=0;
while(n)
{
ans+=n/5;
n/=5;
}
cout<<ans<<endl;
}
return 0;
}
所以,这里对应的代码为:n>>1相当于n/2
#include <iostream>
using namespace std;
int main() {
int n;
while(scanf("%d",&n)!=EOF)
{
int ans=0;
while(n)
{
n>>=1;
ans+=n;
}
cout<<ans+1<<endl;
}
return 0;
}