leetcode

来源:互联网 发布:重生进军网络主播 编辑:程序博客网 时间:2024/06/01 20:52

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

Note:

  1. The given integer is guaranteed to fit within the range of a 32-bit signed integer.
  2. You could assume no leading zero bit in the integer’s binary representation.

Example 1:

Input: 5Output: 2Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.

Example 2:

Input: 1Output: 0

Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.

my solution:

大致思路:

负数可以利用 在以补码形式存储的特性求解

正数我暂时只想到移位:

class Solution {public:    int findComplement(int num) {        if (num < 0)        {            return (unsigned int)num - (unsigned int)(1<<31) - 1;        }        else        {            int mask = 1;            int temp = num;            while (num !=0)            {                mask = mask << 1;                num = num >>1;            }            
            if (temp == 0)
                return 1;
            else            return (mask - 1)^temp;        }    }};


0 0