设变量a,b均为int类型,且均以赋值,现要求不用第三个变量来交换a,b的值.
我的思路是这样的:
任意找两个互为逆运算的运算(比如+和-,×和/,^和^等,其中^代表异或运算)进行如下类似运算
以+和-为例:
a = a + b;
b = a - b;
a = a - b;
以×和/为例:
a = a * b;
b = a / b;
a = a / b;
以^为例:
a = a ^ b;
b = a ^ b;
a = a ^ b;
值得注意的是:+和×的两个操作数可以互换,但是—和/的两个操作数不能互换,所以也可以有以下交换方式
以+和-为例:
a = a - b;
b = b + a;
a = b - a;

a = b - a;
b = b - a;
a = a + b;
以×和/为例:
a = a / b;
b = b * a;
a = b / a;

a = b / a;
b = b / a;
a = a * b;
所以,我猜想:只要是两个互为逆运算的运算符都可以通过以上形式的运算来交换俩整数的值。
当然,实际中只有异或形式的交换才有价值且对于任何类型都适合,其他都会产生溢出。
欢迎大家批评指正,在下先谢谢各位!

解决方案 »

  1.   

    a=a/b;
    如果a=3;b=2
    就出问题了。
      

  2.   

    带有除法的应该被剔除,正如楼上们所说的,int 类型的除法是整除,哪怕结果是 1.9 得到的也是 1。楼主喜欢做这些题,再来一道吧。不使用 if 或 ?: 找出两个 int 值中比较大的那一个public static int max(int a, int b);
      

  3.   

    补上代码
    public class Test {
        public static void main(String[] args) {
            System.out.println(Test.max(199, 311));
        }
        public static int max(int a, int b){
         int c = 0;
         c = (a + b + Math.abs(a - b))/2;
         return c;
        }
    }
      

  4.   


    感觉这样还是用到了 ?: 因为 Math.abs 就是用 ?: 实现的啊。