LintCode 二级制中有多少个1

public class Solution {
    /**
     * @param num: an integer
     * @return: an integer, the number of ones in num
     */
     
     /*
        负数的二进制是其绝对值的补码(反码+1)
        1 源码:  0001
        1 反码:  1110
        1 补码:  1111
         -1     :   1111
     */
    public int countOnes(int num) {
        // write your code here
         int countZero=0,countOne=0;
         int abs=num;
         boolean isPlus=true;  //正数
         if(num<0)
         {
            abs=Math.abs(num+1);
            isPlus=false;
             
         }
         int index=32;
         while(abs!=0)
         {
           
             if((abs%2==1 && isPlus )|| (!isPlus && abs%2==0))
             {
                 countOne++;
             }
             abs>>=1; //右移1 相当于除2
             index--;
         }
         if(num<0)
            countOne+=index;  //负数要往前面补一
        return countOne;
    }

};

时间: 2024-10-09 05:50:34

LintCode 二级制中有多少个1的相关文章

矿业大学论文模板

main.tex 1 \documentclass[preprint,authoryear,PhD]{cumtthesis} 2 \usepackage{fancyvrb}%----------------------------------------------------------用于代码排版 3 \DefineVerbatimEnvironment{shell}{Verbatim}% 4 {frame=single,framerule=0.3mm,rulecolor=\color{re

[ACM] POJ 3252 Round Numbers (一个区间内二进制中0的个数大于等于1的个数有多少个,组合)

Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8590   Accepted: 3003 Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors',

[LintCode] 最多有多少个点在一条直线上

1 /** 2 * Definition for a point. 3 * struct Point { 4 * int x; 5 * int y; 6 * Point() : x(0), y(0) {} 7 * Point(int a, int b) : x(a), y(b) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 /** 13 * @param points an array of point 14 * @return an inte

两个int整数m和n的二进制表达有多少个位不同

题目描述 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 题目分析 二进制中,统计两个数的相应位(bit)相同可以采用异或操作,异或运算结果相同为0不同为1.所以两个数异或的结果中1就是相同位数. public static int count(int a, int b) { int m = a ^ b; int num = 0; while(m>0) { m &= (m-

剑指offer (10) 二进制中1的个数

题目:输入一个整数,输出该数二进制表示中1的个数. 我们可能很快写下如下代码: 1 int NumOf1InBinary(int n) 2 { 3 int count = 0; 4 while (n != 0) { 5 if (n & 1 ) { 6 ++count; 7 } 8 n >> 1; // bug!!! 9 } 10 return count; 11 } 第8行存在bug. 首先C/C++中数有无符号数和有符号数两种(我一直认为无符号数是个蛋疼的存在,滋生大量的bug) 左

C提高4 多维数组,结构体与二级指针

昨天的试题:原题见昨天作业题 [email protected]:~/high/day03$ cat main.c  /* 二级指针,绝佳训练题1 */ #include <stdio.h> #include <stdlib.h> #include <string.h> int spitspring(char *buf1,char *c,char **myp,int *total) { char *p_head =  buf1; char *p_tail =  buf1

动态规划--LintCode简单题

1.爬楼梯 题目:假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 分析:一次只能爬一步或者两步,所以走i步可由走i-1步的方法数和走i-2步的方法数相加获得: 设dp[i]为走i步的方法数目,则dp[i]=dp[i-1]+dp[i-2]; 注意:边界问题,由上面的方程可知道 i 由2开始,且dp[0]=dp[1]=1; 代码: class Solution {public:    /**     dp[i]=dp[i-1]+dp[i-2]

剑指offer编程题Java实现——面试题10二进制中1的个数

题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变成0,与运算进行多少次就有多少个1. 1 package Solution; 2 /** 3 * 剑指offer面试题10:二进制中1的个数 4 * 题目:请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数. 5 * 例如,把9表示成二进制是1001,有2位是1,该函数输出2 6 * 解法

hibernate(九) 二级缓存和事务级别详讲

序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人博客应该也差不多可以做出来了.基本上先这样定下来,开始完成hibernate的东西把.这章结束后,我会将我一些hibernate的资料奉上,供大家一起学习. ---WH 一.概述 这章总的分两大块来讲解, 第一大块,hibernate的事务管理.,对于hibernate的事务管理来说,如果之前学过数