• 从交换两个变量的值来看程序员的“奇技淫巧”


    来看一道简单的题目:交换两个整型变量a、b的值。

     在我们日常写程序时,应该经常会遇到上面的问题,很简单。借用一个第三方变量,很容易实现。代码如下:

    temp = a;
    a = b;
    b = temp;
    

    然而,在某些情况下,比如说面试,面试官可能对这个答案不太满意,那么,能不能不用第三方变量实现交换a、b 的值呢?  

    当然可以。不用第三方变量也有多种方法,比如说下面这种:

    1 a = a + b;
    2 b = a - b;
    3 a = a - b;
    View Code

    回答上面的方法,面试官可能还是不太满意,因为两个整型变量相加会有越界的风险。既然相加会有越界的风险,那么改成相减吧。

    代码如下:

    1 a = a - b;
    2 b = a + b;
    3 a = b - a;
    View Code

    上面的方法,可能还不是面试官想要的,面试官想要的答案可能是位运算。虽然位运算在实际工作中用到的很少,但是用位运算显得逼格高,面试官更乐意听到位运算的答案。

    代码如下:

    1 a = a ^ b;
    2 b = a ^ b;
    3 a = a ^ b;
    View Code

    终于得到了面试官想要的答案,那么,还有更简单的方法嘛?或者说,还有更“巧”的办法嘛?

    看下面的代码:

    1 int main(){
    2     int a  = 0,b = 0;
    3     cin >> a >> b;
    4     cout << b << " " << a << endl;
    5     return 0;
    6 }
    View Code

    运行结果:

    实现了交换两个变量的值。

    当然,最后一种方法是开玩笑了~

  • 相关阅读:
    01人月神话阅读笔记
    第一阶段冲刺010
    03构建之法阅读笔记
    第一阶段冲刺09
    第一阶段冲刺08
    第一阶段冲刺07
    第一阶段冲刺06
    08返回一个整数数组中最大子数组的和
    02构建之法阅读笔记
    请给出一个Scala RDD的HelloWorld例子
  • 原文地址:https://www.cnblogs.com/acBool/p/4841116.html
Copyright © 2020-2023  润新知