1. 程式人生 > >java中不使用比較運算子,求兩個數的最小值與最大值

java中不使用比較運算子,求兩個數的最小值與最大值

通常來說,求兩個數的最大值與最小值,最常用的方法是比較大小。下面給出一種不需要比較大小就可以求出兩個數中的最大值與最小值的方法,該方法用到了一種巧妙的數學方法。

即:

最大值:Max(a,b)=(a+b+|a-b|)/2,

最小值:Min(a,b)=(a+b-|a-b|)/2

當然,這種方法存在一個問題,即當a與b的值非常大時,會出現資料溢位的情況,解決辦法就是在計算時把a與b的值轉換為長整型,從而避免溢位的發生。

程式碼如下:

import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction;

public class Compare {

	public static void main(String[] args) {
		System.out.println("不會溢位:");
		System.out.println("max(3,5)="+ Compare_Max_Min.max(3, 5));
		System.out.println("min(3,5)="+ Compare_Max_Min.min(3, 5));
		System.out.println("可能會溢位:");
		System.out.println("max(3,5)="+ Compare_Max_Min1.max1(3, 5));
		System.out.println("min(3,5)="+ Compare_Max_Min1.min1(3, 5));
	}

}
//不會溢位
class Compare_Max_Min{
	public static int max(int a,int b){
		return (int)(((long)a+(long)b+Math.abs((long)a-(long)b))/2);				
	}
	public static int min(int a,int b){
		return (int)(((long)a+(long)b-Math.abs((long)a-(long)b))/2);
	}
}
//可能會溢位
class Compare_Max_Min1{
	public static int max1(int a,int b){
		return (a+b+Math.abs(a-b));
	}
	public static int min1(int a,int b){
		return (a+b-Math.abs(a-b));
	}
}

執行結果為:

不會溢位:

max(3,5)=5

min(3,5)=3

可能會溢位:

max(3,5)=10

min(3,5)=6