算法:计算十进制数字在二进制表示1的个数
题目一 计算十进制数字在二进制表示 1 的个数 举个例子: 十进制数字为 1 时,它的二进制表示是 001,二进制表示 1 的个数为 1; 十进制数字为 2 时,它的二进制表示是 010,二进制表示 1 的个数为 1; 十进制数字为 3 时,它的二进制表示是 011,二进制表示 1 的个数为 2; 十进制数字为 4 时,它的二进制表示是 100,二进制表示 1 的个数为 1; 十进制数字为 5 时,它的二进制表示是 101,二进制表示 1 的个数为 2; 十进制数字为 6 时,它的二进制表示是 110,二进制表示 1 的个数为 2; 十进制数字为 7 时,它的二进制表示是 111,二进制表示 1 的个数为 3; 时间复杂度 O(logn) 的解法 对于这个题目比较容易想到的是如下代码: int count = 0; while(n != 0) { if(n % 2 == 1) { count++; } n = n >> 1; } 上述代码主要做了两个步骤: n % 2 表示对数字求模运算,也就是计算 二进制的末尾 是 1 还是 0,如果二进制的末尾是 1 ,则 count 自增,count 表示的是二进制表示 1 的个数; n = n >> 1 表示把二进制 往右移走一位 ,比如十进制数字 7 的二进制表示是 111 ,那么通过右移一位后,则变成 011。