关于不用if,switch,?:语句判断两个数大小及其他
2014-09-01 16:12
411 查看
http://biancheng.dnbcw.info/c/58607.html
网上看到一个问题:两个整型数,不准用if 、switch 、?:等判断语句求出两者最大值 。想了一下没有思路,看了下面的回帖感觉挺有意思的,姑且就记录下来吧。
第一种方法:
sum=a+b;
delta=abs(a-b);
max=(sum+delta)/2;
min=sum-max;
其实原理就是任何两个数 a, b 都可以唯一表示为 a=x+y; b=x-y; 然后最大值就是 x+abs(y)。 不过,abs这个函数是利用到了 ?: 运算符的,还有sum可能会溢出,不过这个算法还是很赞的。
第二种方法:
(a>=b && (max=a)) || ( a < b && (max=b));
这里要注意的是 ( a < b && (max=b) )不可以写成(max=b),这样写的话,当a == 0, b < 0 时,max = a 后(a>=b&&max=a) 就为0,所以会进行后面的计算,max = b;这样就错了。这种方法没有溢出的危险。
这个帖子还贴了一个方法也一同贴出来吧。
#include<stdio.h> int get_min( int a, int b ) { return a>b; } int get_max( int a, int b ) { return a<b; } int main() { int a, b; int buf[2]; int min, max; a = 3; b = 7; buf[0] = a; buf[1] = b; min = buf[get_min(a,b)]; max = buf[get_max(a,b)]; printf("%d,%d\n",
min, max); return 0; }
我个人最欣赏的就是第二个方法啦,后来仿照它写了一个 abs函数。
int abs(int foo) { (foo>=0) || (foo = -foo); return foo; }
相关文章推荐
- 关于不用if,switch,?:语句判断两个数大小及其他
- 两个数判断大小(不能用 if, switch, ?, 和其他判断语句)
- 不用那if,switch,?:语句判断两个数的大小
- 有两个变量a和b,不用“if”、“? :”、“switch”或其他判断语句,找出两个数中比较大的
- 有两个变量a 和 b,不用if、?: 、switch 或者其他判断语句,找出两个数中比较大的那个
- 两个变量a,b,不用“if”,“? :”,switch或者其它判断语句,找出两个数中间比较大的
- 不用if语句判断出两个数的大小——值得借鉴
- 有两个变量a 和 b,不用if、?: 、switch 或者其他判断语句,找出两个数中比较大的那个
- 不用if,.?,switch等判断语句,求两变量的大小
- 不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数
- 不用大于、小于、if语句比较两个数的大小
- 求1+2+。。。+n,不用乘除,for、while、if、else、switch、case等关键字及条件判断语句
- 08-14 比较两个数的大小,不用判断语句
- 比较两个数a、b的大小,不能使用大于/小于、if、switch,?:等判断语句
- 不用判断语句比较两个数的大小值
- 比较两个数a、b的大小,不能使用大于/小于、if、switch,?:等判断语句
- 不用判断语句比较两个数的大小值
- 不用if else 等判断语句判断两个数值的大小
- 【面试题】不用if,条件表达式,switch等判断语句------找出两个数中较大的
- 不用if 、for等判断语句和乘除法求1+2..+n的值 &&不用加减乘除求两个数的和