求二进制数中1的个数

来源:互联网 发布:2017淘宝捉猫猫技巧 编辑:程序博客网 时间:2024/05/04 08:52

最近看看编程之美,感觉上面的题挺不错的,分享下。正好熟悉下c++。

题目描述:对于一个整形变量,求二进数中表示“1”的个数。

解法1:对于一个二进制数我们知道如果除以2,如果有余数,则表示当前位置是一个1,如果不是则表示当前位置是0;所以此时我们就可一利用判断余数的方式求出这个数的二进制表示中“1“的个数。

 

#include <iostream>using namespace std;int Count(int n){    int count = 0 ;    while(n){        if(n%2==1){            count++ ;        }        n /= 2 ;    }    return count ;}int main(){    int n ;    cout << "请输入n:" ;    cin >> n ;    cout << "次数中二进制表示中1的个数为:" ;    cout << Count(n) << endl;    return 0;}


解法2:前面的代码很直观,但是操作比较复杂,向右移位依然可以达到相除的目的。我们可以将这个八位数与00000001相与,如果结果为1,则表示当前数的最后一位为1.否者为0。

#include <iostream>using namespace std;int Count(int n){    int count = 0 ;    while(n){        count += n&0x01 ;        n >>=1 ;    }    return count ;}int main(){    int n ;    cout << "请输入n:" ;    cin >> n ;    cout << "次数中二进制表示中1的个数为:" ;    cout << Count(n) << endl;    return 0;}


解法3:由于我们要求的是1 的个数,那么现在就只考虑1的情况,怎么判断呢,可以通过判断这个数是否是2的整数次幂来实现。如我们可以让01000000和00111111进行与操作,结果为0或1即可得出结论。

#include <iostream>using namespace std;int Count(int n){    int count = 0 ;    while(n){        n &= (n-1) ;        count++ ;    }    return count ;}int main(){    int n ;    cout << "请输入n:" ;    cin >> n ;    cout << "次数中二进制表示中1的个数为:" ;    cout << Count(n) << endl;    return 0;}


其余的解法感觉为了求效率有些复杂,就不写了。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老板不发工资怎么办 没签合同的 牙套粘在牙齿上的松了怎么办 缝的线长在肉里怎么办 小孩喜欢用舌头顶牙齿缝怎么办 1岁多小宝贝全身长红点怎么办 生完胸好涨但很难把奶吸出来怎么办 怀孕快9个月内裤上有白带怎么办 一早起来发现内裤有白色液体怎么办 阴部骚痒白带多白带多小腹痛怎么办 15岁一周鲁了3次怎么办 月经摊迟三天内裤有白带怎么办 怀孕内裤上有黄黄的分泌物怎么办 老公出轨想离婚但舍不得孩子怎么办 老婆出轨离婚又舍不得家我该怎么办 怀孕一个月刚刚自慰有点流血怎么办 老公出轨还不知道悔改妻子怎么办 离婚了前妻户口还在再婚怎么办 怀孕六个月内裤老是湿有异味怎么办 怀孕五个月内裤总是湿有异味怎么办 耳朵里面有个洞老是流水冒浓怎么办 宝宝拉粑粑有臭酸味怎么回事怎么办 老婆晚上回家内裤是湿的尿味怎么办 怀孕五个月下身痒内裤湿怎么办 哺乳期奶水太多经常弄湿衣服怎么办 麻料裙子一坐下就皱怎么办 不小心把答题卡弄皱了怎么办 嘴巴又干又黏又臭怎么办 不小心把红枣核吞了怎么办 小天才电话手表被偷了怎么办 18k金被火烧黑了怎么办 衣服掉色染到别的衣服上怎么办 夏天太阳太毒刚发芽的花种子怎么办 长斑了怎么办 喝玫瑰花茶能祛斑吗 烧纸火纸迷信纸利润太低怎么办 刚买的绣球花花有点蔫怎么办 ZF葡7正常佩戴动能太满怎么办 怀孕初期老婆婆做的菜不好吃怎么办 调节协议已签字不签收调解书怎么办 给晋中苗圃拉了树苗没拿上钱怎么办 多肉旁边长出好多小株怎么办 烤瓷牙制备时颌关系不够怎么办