美文网首页
求一个正整数转成二进制后,有多少个1?

求一个正整数转成二进制后,有多少个1?

作者: 豪冷 | 来源:发表于2019-08-29 10:18 被阅读0次

之前,看到一个判断一个正数是否是2的乘方(比如16是2的4次方)。要求性能尽可能高。

思路一:从int temp = 1开始,每次循环比较是否与number相等,不相等就让temp增大一倍(temp = temp*2),如此循环比较,直到相等为止。

这个方法的时间复杂度是O(LogN)。

思路二:寻找是2的乘方的数,的规律。

            N        N-1
     2  ->  10b      1b
     4  ->  100b     11b
     8  ->  1000b    111b
     16 ->  10000b   1111b

最高位都是1

所以,N&(N-1) = 0。时间复杂度为O(1)。

那么,求一个正整数转成二进制后,有多少个1?

当然,也应该与位运算有关了。

一个数N,N&1 要么是0,要么是1。

所以,结果为1时,说明最低位是1。为0时,说明最低位不是1。

因此,每次&后,都右移一位,再次&,直到N右移为0时,结束循环。

    NSInteger value = 111;
    NSInteger count = 0;
    while (value) {
        NSLog(@"%ld",value&1);
        int x = value&1;
        if (x == 1) count++;
        value = value>>1;
    }

相关文章

  • 求一个正整数转成二进制后,有多少个1?

    之前,看到一个判断一个正数是否是2的乘方(比如16是2的4次方)。要求性能尽可能高。 思路一:从int temp ...

  • 476. Number Complement

    题目分析 题目链接,登录 LeetCode 后可用这道题目要求是求一个正整数的补数,并且假设正整数的二进制形式不以...

  • leetcode-day20-根据数字二进制下 1 的数目排序[

    思路: 先将数组排序,再讲数组转成二进制,然后二进制找出每个有多少个数字1,放入对象中,这步很重要,对象中用两个属...

  • 算法训练4

    题目描述输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以...

  • java——末尾0的个数

    【题目描述】输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n =10; n! = 3628800,所...

  • 欧拉函数 学习

    任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成...

  • 二进制的运算

    转成二进制主要有以下几种:正整数转二进制,负整数转二进制,小数转二进制 在说明换算之前,先介绍一下次方和负次方的概...

  • 求一个整数转换成二进制后的位数

    题目描述: 给定一个正整数n,求将n转换为二进制后有多少位? 例如:10转换为二进制后为1010,共有4位。 思路...

  • 一看就会的小程序(VC++ 十进制数转换为二进制并输出)

    VC++ 十进制数转换为二进制并输出,输入一个正整数,求余数,递归调用,转换为二进制输出。 项目源代码: 部分代码...

  • 位运算

    n & 1 可以判断n的奇偶,n为奇数,则n & 1 = 1例如 11 转成二进制 10111 转成二进制 000...

网友评论

      本文标题:求一个正整数转成二进制后,有多少个1?

      本文链接:https://www.haomeiwen.com/subject/tkbbectx.html