概述
描述
给定一个十进制非负整数N,求其对应2进制数中1的个数。
输入
输入包含一行,包含一个非负整数N。(N < 109)
输出
输出一行,包含一个整数,表示N的2进制表示中1的个数。
样例输入
100
样例输出
3
这道题比较简单,如果一个数不能被2整除,那么这个数二进制形式的最后一位就是1,可以通过这个来判断1的个数。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <set>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
int n,k=0;
cin>>n;
while(n>0)
{
if(n%2) k++; //判断n二进制形式的最后一位有没有1
n>>=1; //将n右移一位,等价于n/=2;
}
cout<<k; //输出1的个数
return 0;
}
法二
除了这种方法,还可以用位运算来解决。
lowbit函数可以求出最后一位的1。例如:1100(二进制)用lowbit函数返回的是100(二进制),111用lowbit函数返回的是1。
写法如下:
int lowbit(int x)
{
return x&(-x); //x和x的补码进行与操作
}
用lowbit函数也可以很轻松的解除这个题。
代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
int lowbit(int x)
{
return x&(-x);
}
int main()
{
int n,k=0;
cin>>n;
while(n) {n-=lowbit(n); k++;}
cout<<k;
return 0;
}
最后
以上就是认真含羞草为你收集整理的1的个数(lowbit 函数应用)的全部内容,希望文章能够帮你解决1的个数(lowbit 函数应用)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复