Fork me on GitHub

1012.十进制整数的补码


自己的方法不适用性太差了 因为要另外处理0;
所以不建议采用

import java.util.Scanner;
class Solution {
  	  public int bitwiseComplement(int N) {
			String str = "";
			int sum = 0 ;
			if(N == 0) {
				return 1;
			}
			while( N >0 ) {
				if(N % 2 == 0) {
					str = 1 + str;
				}
				else {
					str = 0 + str ;
				}
				N /= 2;
			}
			for(int i = 0 ; i <str.length(); i++) {
				if(str.charAt(i) == '1') 
					sum = (sum)*2 +1;
				else
					sum = (sum)*2 +0;
			}
	        return sum;
	    }
}

其他版本 emmmm 也是要另外处理 0 和 1 不过他方法确实挺好的 采用了位运算 get~~~~

class Solution {
    public int bitwiseComplement(int N) {
        int i, M=N;
        for (i=1 ; i<=N ; i<<=1){
            M = M^i;
        }
        return N==0 ? 1 : M ;
    }
}

第二种位运算 很ok 基本都是这种思路

public int bitwiseComplement(int N) {
        if (N == 0) return 1;
        int ones = 0, tmp = N;
        while (tmp != 0) {
            tmp = tmp >> 1;
            ones = ones << 1;
            ++ones;
        }
        return N ^ ones;
    }
posted @ 2019-07-08 12:23  cznczai  阅读(405)  评论(0编辑  收藏  举报