问答题 如何不使用比较运算就可以求出两个数的最大值与最小值
【正确答案】
【答案解析】通常来讲,在求两个数中的最大值或最小值时,最常用的方法就是比较大小。下面给出一种不需比较大小就可以求出两个数中的最大值与最小值的方法,该方法用到了一种比较巧妙的数学方法,即最大值Max(a,b)=(a+b+|a-b|)/2,最小值Min(a,b)=(a+b-|a-b|)/2。当然,这种方法存在着一个问题,即当a与b的值非常大时,会出现数据溢出的情况,解决的办法就是在计算时把a与b的值转换为长整型,从而可以避免溢出的发生。示例如下:
public class Test{
//可能会溢出
public static int max(int a, int b){
return(a+b+Math.abs(a-b))/2;
}
public static int min(int a, int b){
return(a+b-Math.abs(a-b))/2;
}
public class Test{
//不会溢出
public static int max1(int a, int b){
return(int)(((long)a+(long)b+Math.abs((long)a-(long)b))/2);
}
public static int min1(int a, int b){
return(int)(((long)a+(long)b-Math.ahs((long)a-(long)b))/2);
}
public static void main(String[]args){
System.out.println("max(3, 5)="+max(3, 5));
System.out.println("min(3, 5)="+min(3, 5));
System.out.println("max1(3, 5)="+max1(3, 5));
System.out.println("min1(3, 5)="+min1(3, 5));
}
}
程序运行结果为:
max(3, 5)=5
min(3, 5)=3
max1(3, 5)=5
min1(3, 5)=3