A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题,求一个整数的二进制形式中,"1"的个数

10 个回复

倒序浏览
写出时间复杂度 O(sizeof(int)) 的代码并不难。
结果 += 数字 & 1
数字 = 数字 >> 1
循环执行直至数字为 0 即可。
回复 使用道具 举报
Buer 来自手机 中级黑马 2016-8-5 22:00:20
藤椅
[quote]cat73 发表于 2016-8-5 19:13
写出时间复杂度 O(sizeof(int)) 的代码并不难。
结果  = 数字

没看懂,可以贴个具体代码吗
回复 使用道具 举报
Buer 来自手机 中级黑马 2016-8-6 12:49:45
板凳
除了这个最笨的方法,遍历数字二进制字符串,数1的个数,还有其他简便算法吗。求详解

1470458890192..jpg (72.01 KB, 下载次数: 5)

1470458890192..jpg
回复 使用道具 举报
拿个正整数举例
int n;
int count =0;
while(n >=0) {
n = n & n-1;
count++;
}
输出count就可以了
回复 使用道具 举报
本帖最后由 ylca 于 2016-8-7 01:18 编辑

[Java] 纯文本查看 复制代码
        static int BinaryCount2(int i){
                int c = 0;
                while(i>0){
                        if((i%2)==1){
                                c++;
                        }
                        i>>=1;
                }
                return c;
                
        }
        static int BinaryCount(int n) {
        int c = 0; // 计数器
        while (n > 0) {
            if ((n & 1) == 1) {
               c++;// 计数器加1
            }
            n >>= 1; // 移位
        }
        return c;
    }
回复 使用道具 举报
Buer 中级黑马 2016-8-7 15:37:19
7#
yuxing 发表于 2016-8-6 23:42
拿个正整数举例
int n;
int count =0;

循环能结束吗.........  我想问的就是 n = n & n -1; 这句的意思. 什么意思呢
回复 使用道具 举报
Buer 中级黑马 2016-8-7 15:38:58
8#
ylca 发表于 2016-8-7 01:11
[mw_shl_code=java,true]        static int BinaryCount2(int i){
                int c = 0;
           ...

是个好办法,受教受教
回复 使用道具 举报
Buer 发表于 2016-8-7 15:37
循环能结束吗.........  我想问的就是 n = n & n -1; 这句的意思. 什么意思呢

用位运算符 消除二进制的最后一个1.
n  =     (n&n-1)
这样应该看懂了吧
回复 使用道具 举报
Buer 来自手机 中级黑马 2016-8-8 13:04:04
10#
[quote]yuxing 发表于 2016-8-7 18:30
用位运算符 消除二进制的最后一个1.
n  =     (n

虽然不理解为什么能消除1,但确实是见过最简练的方法,赞\(≧▽≦)/。
还有循环条件应该是>0,不可以等于。谢谢
回复 使用道具 举报
Integer.bitCount(n) 就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马