很有意思的编程,挑战高手

来源:百度知道 编辑:UC知道 时间:2024/05/28 12:08:58
问题:There are two int variables: a and b, don’t use “if”, “? :”, “switch”
or other judgement statements, find out the biggest one of the two
numbers.
请大家给出答案,还要求在小数。
注意:
a,b可能为零

还要求最小数(我对问题的引申)。
要输出最大数啊。
我遇到的一个问题,无处下手。

楼上思路对,但是实现不对,正确实现如下:
#include <stdio.h>

int max( int a, int b )
{
return ((unsigned)(b-a)>>(sizeof(int)*8-1))*(a-b)+b;
}

int min( int a, int b )
{
return ((unsigned)(a-b)>>(sizeof(int)*8-1))*(a-b)+b;
}

int main()
{
printf("%d %d\n", min(3,5), max(3,5));
return 0;
}

程序输出:
3 5

“还要求在小数”是什么意思?

我的解答:

int max( int a, int b )
{
return (a-b)>>(sizeof(int)*8-1)*(a-b)+b;
}

即用(a-b)的最高位是1还是0

另外,我觉得不能用abs等函数,因为该函数中有if,如果允许用函数的话,那还不如直接用max函数呢

补充回答:
楼主仔细瞧了--------
我的答案输出的就是最大数啊~
如果a>b的话,(a-b)>0
(a-b)>>(sizeof(int)*8-1)就是(a-b)的最高位
也就是1
这样return的就是1*(a-b)+b=a
如果a<b,(a-b)>>(sizeof(int)*8-1)就是0
这样return的就是0*(a-b)+b=b

最小数同理可得:
int min( int a, int b )
{
return (b-a)>>(sizeo