解法一:如果n!最末尾位0,则右移一位得到商,如果末尾是1,则不能被2整除,是奇数,这个问题等同与求n!中质有质因数2的个数。。最后结果再加1
代码:
#include<iostream>
using namespace std;
int main()
{
int n,sum;
sum=0;
cin>>n;
while(n)
{
n>>=1;
sum+=n;
}
cout<<sum+1<<endl;
system("pause");
return 0;
}
解法二:N减去N的二进制表示中1的数目,然后再加1。。这也是一个规律。。
代码:
#include<iostream>
using namespace std;
int getNum(int n)
{
if(n==0) return 0;
int count=0;
while(n)
{
n&=(n-1);
count++;
}
return count;
}
int main()
{
int n,sum;
sum=0;
cin>>n;
cout<<n-getNum(n)+1<<endl;
system("pause");
return 0;
}
来源:https://www.cnblogs.com/sooner/archive/2013/04/02/2996208.html