二进制中1的个数

来源:互联网 发布:中国人长相 知乎 编辑:程序博客网 时间:2024/06/14 14:53

面试官的手机被他调皮的儿子小明用一个数字作为密码锁上了。
小明只记得这个数字的十进制范围是l~r,且这个数的二进制表示中恰有m个1,却不记得确切的数字了。
面试官可急坏了。这才有了小赛一个将功赎过的机会。
他想要让小赛算出,他最坏情况下,要试多少次密码才能确保打开手机呢?
请输出这个次数。
输出 :
输出一行,包含一个整数,表示面试官最坏情况下,要试多少次密码才能确保打开手机。
如果小明记错了(也就是不存在任何一个数满足),则输出”-1”(不含引号)。

#include<iostream>using namespace std;int bitNumber(int n){    int num = 0;    while (n){        ++num;        n=n&(n-1);    }    return num;}int main(){    int l,r,m,result=0;    while (cin >> l >> r>>m){        for (int i = l; i <= r; ++i)            if (bitNumber(i) == m)                ++result;      if(result)            cout << result<<endl;      else            cout<<-1;    }    return 0;}
#include<iostream>using namespace std;int bitNumber(int n){    int num = 0;    int tmp = 1;    while (tmp <= 2 * n){        if (tmp&n)            ++num;        tmp = tmp<< 1;    }    return num;}int main(){    int l,r,m,result=0;    while (cin >> l >> r>>m){        for (int i = l; i <= r; ++i)            if (bitNumber(i) == m)                ++result;      if(result)            cout << result<<endl;      else            cout<<-1;    }    return 0;}
0 0