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

转载 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;    ...

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

转自 : http://blog.csdn.net/tianshuai11/article/details/7025398 第一类方法也是常用的方法,通过多次的数值计算来完成交换,到...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

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

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

不用临时变量 实现两个变量之间的数据交换

最近看到了哈佛大学公开课:计算机科学cs50_用户体验,数组与指针,Hash函数_网易公开课 里面介绍了一个不用临时变量就可以实现两个变量之间的数据交换,好奇这是什么原因,所以找到了这篇文章,纯粹当...

不用临时变量,只用11个字符交换两个变量的值——窥视C#编译原理的冰山一角

曾经有一道题,已知:     int   a,   b;     并已赋值,值的唯一限制是int.MinValue   例如   a   =   2147483647,   b ...

不使用中间变量交换变量a、b变量

这是一道经典题目,很基础,但是经常考。 题目描述:不用任何变量交换a、b两个变量。 分析: 交换两个变量的问题在c语言入门书籍中都有所涉及。在讲解c语言的函数的时候老师都会告诉我们,实参和形参的...
  • cywosp
  • cywosp
  • 2011-09-02 15:40
  • 2593

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

通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下: int a,b; a=10; b=15; int t; t=a; a=b; b=t; 这种算法易于理解,特...

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

原文出处: http://blog.163.com/jian_xiong/blog/static/19193236320130604848997/ 通常我们的做法是(尤其是在学习阶段...

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

/* 交换两个变量的值,不使用第三个变量 */ #include using namespace std; void Swap1(int& a, int& b) { if(a ...

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

通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下:int a,b;a=10; b=15;int t;t=a; a=b; b=t;这种算法易于理解,特别适合帮助初学者了解...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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