我是靠谱客的博主 认真含羞草,最近开发中收集的这篇文章主要介绍1的个数(lowbit 函数应用),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

描述
给定一个十进制非负整数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 函数应用)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部