求N!的二进制表示中最低位1的位置?

解法一:如果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/p/2996208.html