Number Completement

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

public class NumberCompletement {        
        public static void main(String[] args) {
        char[] chr = Binary.toBin(2);
        char[] afterChr = new char[chr.length] ;
        int i = 0;
        for(char c : chr){
            c = (char) ('0' == c ?'1':'0'); 
            afterChr[i] = c;
            i++;
        }
        int n = Binary.toInt(afterChr);
        System.out.println(n);
    }

        /**
     * 二进制转换成十进制的方法是
     * 1、从最低位(右边)开始计算 : 位上的值 * 2^(位数-1)
     * @param binaryStr
     * @return
     */
    public static int toInt(char[] binChr) {
        int sum = 0;
        for(int i = binChr.length-1,j = 1;i>=0;i--,j++){
            int num = Integer.parseInt(""+binChr[i]);
            sum += num*Math.pow(2,j-1);
        }
        return sum;
    }
    
    /**
     * 十进制转换成二进制
     * @param x
     * @return
     */
    public static char[] toBin(int x) {
        String xStr = "" ;
        while(x > 0){
            xStr = ((x %2 == 0?"0":"1")+xStr);
            x = x / 2;
        }   
        return xStr.toCharArray();
    }
}

你可能感兴趣的:(Number Completement)