代码改变世界

剑走偏锋——一道比较大小题的技巧解法

2009-07-31 08:52  Logic0  阅读(199)  评论(0编辑  收藏  举报
我顶 字号:
刚在CSDN上看了一道面试题,思路不够开阔,没想出方法,后总结大家方法如下。
题目描述:
             给定两个整型数a,b,不许用if,switch,? : ,找出最大的一个。

解法1:
利用C语言的逻辑真假值
#include "stdio.h"
int main()
{
     int a=3,b=4;
     printf("max is %d\n",(a>=b)*a+(a>b)*b);
     return 0;
}

解法2:
利用循环条件(不违反规则,有点娱乐性质)
#include "stdio.h"
int main()
{
       int a=3,b=5;
       while(a>=b)
       {        printf("max is %d\n",a);return 0;}

        printf("max is %d\n",b);return 0;
}
for循环也一样

解法3:
利用数学知识
int main()
{
    int a=3,b=5;
    printf("max is %d\n",(a+b+abs(a-b))/2);
    return 0;
}

解法4:
利用整数的符号位
int main()
{
    int n[2] = {3,5};
    printf("max is %d\n",n[((n[0]-n[1])>>(sizeof(int)*8-1))&1]);      //感谢jineslong指出此处问题
}

解法5:
利用C语言判断逻辑的顺序
int main()
{
    int a=3,b=5;
    return (a<b&&printf("max is %d\n",b))||(a>=b&&printf("max is %d\n",a));
}

呵呵,充分证明了问题的解法不止一种。