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

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

不使用任何中间变量如何将a、b的值进行交换

此题主要是考察工作经验,在日常工作中经验遇到内存不够的情况,在内存不够的情况,怎么不使用中间变量使两个变量的值进行交换呢?...
  • J8121
  • J8121
  • 2016年07月16日 21:14
  • 1932

互换两个变量,不使用中间变量

第一种方法:a=a+b;b=a-b;a=a-b; 代码如下: #include "stdio.h"int main(void){ int a,b; printf("请输入两个变量a和b:/n"); s...
  • Hackbuteer1
  • Hackbuteer1
  • 2011年06月08日 14:54
  • 6498

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

我们在实现交换的时候一般都是用一个中间变量来暂存: void swap(int& a, int& b) { int temp = a; //exchange a = b; b = temp;...
  • YoungStunner
  • YoungStunner
  • 2016年03月08日 12:46
  • 943

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

常见的面试题,很简单,但值得细想的问题还是很多,总结解法如下: (1)加减法:        int a =10,b=5;        a = a+b;        b = a-b;  ...
  • sinat_15155817
  • sinat_15155817
  • 2017年01月03日 19:36
  • 180

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

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

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

在编程的过程中经常会遇到将两个数交换,特别是在排序的时候。一般的实现两个数的交换都要使用中间变量如下: void inline swap(int &a,int &b) { int tmp ;...
  • xingyu19871124
  • xingyu19871124
  • 2012年06月04日 10:45
  • 2385

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

转自 : http://blog.csdn.net/tianshuai11/article/details/7025398 第一类方法也是常用的方法,通过多次的数值计算来完成交换,到...
  • xiaoshi_xiaoshi
  • xiaoshi_xiaoshi
  • 2011年12月27日 18:47
  • 6315

交换两个变量的值,不使用中间变量的四种法方法

转载自:http://blog.csdn.net/kangkermit/article/details/21371159 通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。...
  • u013410274
  • u013410274
  • 2017年02月25日 21:58
  • 209

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

不用中间变量,交换变量
  • jnbbwyth
  • jnbbwyth
  • 2015年07月18日 18:59
  • 2156

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

第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种: (1)加减法。 a = a + b; b = a - b; a = a - b; 该方法可以交换整型和浮点型...
  • Mormont
  • Mormont
  • 2016年12月17日 22:07
  • 1979
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不用中间变量,实现两个变量的交换
举报原因:
原因补充:

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