绝对经典的程序

来源:互联网 发布:机器人朗读软件 编辑:程序博客网 时间:2024/04/29 08:11

很久都没有写过技术方面的文章了,最近觉得还是把自己觉得不错的东西写出来供大家分享。

在一道面试题中,看到题目要求不使用比较运算符,不实用if...else,不使用switch,不使用for,不使用三目运算符,不使用系统函数实现得到两个数中较大的一个数。

刚开始一看这还不简单,结果仔细一想,确实这个题不简单,首先能用的东西太少了。

然后开始思考数学里面的那些公式,最后想到了一个表达式:

int a,b;

c=((a+b)+|a-b|)/2;

这样就可以得到a,b中较大的一个数,看来学数学就是好,我刚好是学数学的,嘿嘿。

接下来就是要如何解决绝对值这个问题,也许平时写一个代码实现绝对值的功能太容易了,但是这里要求实在是太苛刻了。不过还是可以实现的

实现如下:

int myabs(int a)

{

        int arr[2]={0};

        arr[0]=a;

        arr[1]=-a;

        int ind=(a>>31)&1;        //根据最高位来判断这个数是负数还是正数。

        return arr[ind];       

}

在这个函数里面通过数组的方式实现了一个不求绝对值的函数.

当然比较得到两个数中较大的那个函数实现如下:

int  max(int a,int b)

{

          return (a+b+myabs(a-b))/2;

}

觉得这个代码很经典,供大家分享

原创粉丝点击