Java-另类加法、无缓存交换

另类加法
实现两个数的相加求和,实现过程中不能用+运算符号

class UnusualAdd {
    /**
     * 二进制加法特点
     * 位的异或运算跟求‘和’的结果一致:
     *  异或 1^1 = 0   1^0 = 1 0^0 = 0
     *  求和 1+1 = 0   1+0 = 1 0+0 = 0
     * 位的与运算跟求‘进位’的结果一致:
     *  位 与 1&1 = 1 1&0 = 0 0&0 = 0
     *  进位  1+1 = 1 1+0 = 1 0+0 = 0
     * @param A
     * @param B
     * @return
     */
    public int addAB(int A, int B) {
        // write code here
        int xor,and;
        while (B != 0){
            xor = A^B;//求和,但是不加进位
            and = (A&B) << 1;//求进位
            A = xor;
            B = and;//如果进位为0,那么当前的和(A)就是最后的结果
        }
        return A;
    }
}

无缓存交换

/**
 * 请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值。
 * 给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回交换后的数组。
 * 测试样例:
 * [1,2]
 * 返回:[2,1]
 */

两种方法


public class Exchange {
    public int[] exchangeAB(int[] AB) {
        // write code here
        AB[0] = AB[0] + AB[1];
        AB[1] = AB[0] - AB[1];
        AB[0] = AB[0] - AB[1];
        return AB;
    }

    public int[] exchangeABTwo(int[] AB) {
        // write code here
        AB[0] ^= AB[1];
        AB[1] ^= AB[0];
        AB[0] ^= AB[1];
        return AB;
    }
}

你可能感兴趣的:(练习题)