编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以及任何的比较语句

来源:互联网 发布:unity3d抗锯齿设置 编辑:程序博客网 时间:2024/05/29 18:47

总结收集的以下几种算法设计:

第一种(跟要求有差别):

<pre name="code" class="cpp">#include<iostream>using namespace std;int max(int a,int b){return (((a-b) & 0x80000000) ? b : a);}void main(){cout<<max(3,2)<<endl;cout<<max(6,5)<<endl;}


第二种:

int Max( int a, int b )  {      unsigned int flag = static_cast<unsigned int>(a - b);      flag = flag >> 31; //得到符号位,为0则a大,为1则b大     int array[] = {a, b};  //以flag为数组下标判断较大的数     return array[flag];  }  int main()  {      cout<<Max(3, 6)<<endl;      return 0;  }  

第三种:

<pre name="code" class="cpp">#include<iostream>#include <windows.h>#include <cmath>using namespace std;int Max( int a, int b )  {    byte flag = a - b;      //255    flag = flag >> 7;       //得到符号位    int array[] = {a, b};   //以flag为数组下标判断较大的数     return array[flag]; }int main(){    cout<<Max(3, 6)<<endl;    return 0;}


第四种:

int Max( int a, int b )  {int c = (a + b + fabs(a-b)) / 2;return c;}int main(){cout<<Max(3, 6)<<endl;return 0;}


0 0
原创粉丝点击