剑指Offer - 九度1513 - 二进制中1的个数2013-11-29 23:35 题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样例.对于每个输入文件,第一行输入一个整数T,代表测试样例的数量.对于每个测试样例输入为一个整数.n保证是int范围内的一个整数. 输出: 对应每个测试案例,输出一个整数,代表输入的那个数中1的个数. 样例输入: 3 4 5 -1 样例输出: 1 2 32 题意分析: 这题是<编程之美>的原题了,只需要…
  题目描述:   输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.   解题思路:   本题有以下两个解决方案:   (1)依次判断每一位.判断的方法是先与1相与,为1则说明该位为1,为0说明该位为0,然后将1左移,再判断倒数第二位,依次循环32次.(注意这里使用1左移,而不要让该数右移,右移可能会因符号位的问题而导致死循环,一般情况下能用左移尽量不用右移).   (2)n与n-1相与,直到相与结果变为0.如果n的最右一位为1的话,n-1除了最右位变为0其他位同n相同,相与去掉…
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.   //思想:用1(1自身左移运算,其实后来就不是1了)和n的每位进行位与,来判断1的个数     private static int NumberOf1_low(int n) {         int count = 0;         int flag = 1;         while (flag != 0) {             if ((n & flag) != 0) {            …
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目分析 首先我们要了解计算机中负数使用补码表示的,原码.补码的概念以及原理可以参考这里,这个题目我们应该从二进制入手,值得一提的是,在能用位运算的情况下我们尽量用位运算,因为计算效率会提升很多,毕竟计算机中的数据都是以二进制表示的. 那么位运算怎么入手呢?首先我们先要知道一个知识点:如果一个整数与1做与运算的结果是1,则表示该整数最右边一位是1,否则是0. 那么解法就出来了:一个一个向右移位,并且判断最右边的那个位是否…
输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. public class Solution { public int NumberOf1(int n) { String str = Integer.toBinaryString(n); char [] c = str.toCharArray(); int t = 0; for(int i = 0; i < c.length; i++){ if(c[i] == '1'){ t++; } } return t; } }…
题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变成0,与运算进行多少次就有多少个1. package Solution; /** * 剑指offer面试题10:二进制中1的个数 * 题目:请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数. * 例如,把9表示成二进制是1001,有2位是1,该函数输出2 * 解法:把整数减一和原来的数做…
// 面试题15:二进制中1的个数 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如 // 把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. #include <cstdio> int NumberOf1_Solution1(int n) { ; unsigned ; while (flag) { if (n & flag) count++; flag = flag << ; } return count; } int Nu…
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 需要与面试官确认的是,这个二维数组的元素是否存在重复情况,如何处理重复情况. 解题思路: 1.判断待查找整数与矩阵的左上角的最小元素以及右下角的最大元素,如果没在他们之间则直接返回没有找到. 2.选取数组中右上角的数字,如果该数字等于要查找的数字,则查找过程结束; 3.如果该数字大于要查找的数字,则剔除这个数字所在的列;…
题目:请实现一个函数,输入一个函数,输出该数二进制表示中1的个数.例如把9 表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 这道题最典型的方法就是用移位统计,就比如统计9的二进制1个数: 1.9的二进制位1001,9-1的二进制位1000. 2.两者做与运算,结果为1表示最后一位为1,否则为0 3.将1001向右移位一位然后重复上述步骤直到该数字为0停止 代码实现如下: #include <iostream> using namespace std; int NumberO…