不用中间变量,实现两个变量的交换

转载 2017年01月03日 19:36:55

常见的面试题,很简单,但值得细想的问题还是很多,总结解法如下:

(1)加减法:

       int a =10,b=5;

       a = a+b;

       b = a-b;

       a = a-b;

       System.out.println("a=" + a);
       System.out.println("b=" + b);

   原理:其实是用a做中间变量;

   问题:(1)内存溢出,有人提出这种解法如果a,b的值非常大时可能会溢出,即a=a+b;可能会超出Int范围;

              而实际上加法造成的溢出后面的减法会溢出回来,所以这种算法不会产生内存溢出问题,可以自己测试。

           (2)精度损失,对应float和double类型,会造成精度损失;

                    float a =3.123456f;
                    float b=1234567.000000f;

                    交换完后:a=1234567.0; b=3.125;

                    如果是double类型;交换完后a=1234567.0; b=3.1234559998847544;

  还有人提出a=a*b;b=a/b;b=a/b;原理和加减法一样,同样存在精度损失问题;

(2)异或法:

      int a =10,b=5;

       a^=b;

       b =a^b;

       a = a^b;

       System.out.println("a=" + a);
       System.out.println("b=" + b);

       原理:异或就是将十进制转化成二进制0和1,进行位操作;

      问题:float,double类型的无法异或;

(3)内嵌汇编    


    a=1, b=-2;   

 _asm    {     

   push a     

   push b     

   pop  a       

    pop  b   

   }   

 printf("a=%d, b=%d\n", a, b);

原理不清楚(4)

最猛的办法(哈哈,绝了):    

   int a = 3;        int b = 2;    

    printf("a = %d,b = %d", b, a);

相关文章推荐

怎样不用中间变量temp 实现两个数交换

第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种: (1)加减法。      a = a + b;      b = a - b;      a ...

[C/C++] 怎样不用中间变量temp 实现两个数交换

第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种: (1)加减法。 a = a + b; b = a - b; a = a - b; 该方法...
  • aclay
  • aclay
  • 2012年10月21日 12:34
  • 1754

不使用中间变量交换两个数值变量的值

第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种:(1)加减法。 a = a + b; b = a - b; a = a - b; 该方法可以交换整型和浮点型数值的变量,...

不适用中间变量交换两个数值型变量的值

不使用中间变量交换两个数值型变量的值 第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种:   (1)加减法。      a = a + b;      b = a...

c语言中不需要中间变量就能实现两个数交换的几种算法

第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种: (1)加减法。 a = a + b; b = a - b; a = a - b; 该方法可以交换整型和浮点型...
  • Mormont
  • Mormont
  • 2016年12月17日 22:07
  • 1260

不用第三个变量,直接交换两个变量的值

记得曾经看过不用引进第三个变量而直接变换两个变量的值的例子。见过的两种方法如下: 方法一: var a=1; var b=2; a=a+b; b=a-b; a=a-...
  • Yelbosh
  • Yelbosh
  • 2013年04月24日 10:02
  • 600

不用第三个变量,直接交换两个变量的值

记得曾经看过不用引进第三个变量而直接变换两个变量的值的例子。见过的两种方法如下: 方法一: var a=1; var b=2; a=a+b; b=a-b; a=a-b; 输出a,b可以发...
  • remy303
  • remy303
  • 2012年03月02日 14:34
  • 2924

不用中间变量实现交换swap的问题

我们在实现交换的时候一般都是用一个中间变量来暂存: void swap(int& a, int& b) { int temp = a; //exchange a = b; b = temp;...

java(引入一个中间变量,不引入中间变量)交换两个变量的值

一、描述 在不引入其它变量的情况下交换两个数,引入一个变量做中介,交换两个数的值,第一种是引入一个临时变量,第二种是将两个数的和存放在其中一个变量中,第三种方法是使用异或运算,一个数异或上任意一个数两...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不用中间变量,实现两个变量的交换
举报原因:
原因补充:

(最多只允许输入30个字)