a、b进行交换

第1题:不用if、?、switch、或其他判断语句,找出两个数中间比较大的

方案一:

1 int max = ((a+b) + abs(a-b)) / 2;

方案二:

1 int c = a-b;
2 char *strs[2] = {"a Large ","b Large "};
3 c = unsigned(c) >> (sizeof(int) * 8 - 1);

(第二种不明白啊........)

 

第2题:将a、b的值进行交换,并且不实用中间变量;

方案一:

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

注:本方案有个缺点,如果a、b都是比较大的两个数,a = a+b就会越界

方案二:

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

无须担心越界问题.

posted @ 2012-08-23 18:39  xiaolongxia  阅读(112)  评论(0)    收藏  举报