1. 程式人生 > >不使用比較運算就可以求出兩個數的最大值與最小值

不使用比較運算就可以求出兩個數的最大值與最小值

package SuanFa.MaxMinT;


public class MaxMinT {
//可能會溢位
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 static long max1(long a,long b){
return(a + b + Math.abs(a - b))/2;
}
public static long min1(long a,long b){
return(a+b-Math.abs(a-b))/2;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("max(3,5)=" + max(1234567890,500000));
System.out.println("max(3,5)=" + max(3,5));
System.out.println("max(3,5)=" + max1(3,5));
System.out.println("max(3,5)=" + max1(1234567890,1234567890));
}


}

相關推薦

使用比較運算可以個數

package SuanFa.MaxMinT; public class MaxMinT {//可能會溢位public static int max(int a,int b){return(a + b + Math.abs(a-b))/2;}public static in

用遞迴函式個數大公約數

 #include <stdio.h> int gcd(int x, int y); int main() {     int m,n;     printf("輸入兩個數字:");     scanf("%d %d", &m, &n);  

不用判斷語句數較

原題:兩個整型數,不準用if 、switch 、?:等判斷語句求出兩者較大者(更有甚者只讓用一條語句) 最近的筆試題中,此題出現頻率不小,論壇上也時有人問起,此文給出C語言版的一種解決方案(得較小者同理)。 為說明問題方便,不使用一條語句,理解思路後稍作改動便可以換成一條語

運算---不用任何比較判斷找個數中的

【題目】   給定兩個32位整數a和b,返回a和b中較大的一個。要求不能使用比較判斷。 【基本思路】  方法一。得到a - b的符號就可以知道a和b哪一個大了。具體過程參照如下程式碼: int getMax1(int a, int b) {

java中使用比較運算子,個數

通常來說,求兩個數的最大值與最小值,最常用的方法是比較大小。下面給出一種不需要比較大小就可以求出兩個數中的最大值與最小值的方法,該方法用到了一種巧妙的數學方法。 即: 最大值:Max(a,b)=(a+b+|a-b|)/2, 最小值:Min(a,b)=(a+b-|

個數組中相同的元素

不同的 out 優化 ont 相同 array ted str args 找出兩個數組中不相同的元素,網上貼出的代碼基本如下: /** * 找出兩個數組中不同的元素 */ public class Test3 { public static Set<In

用java實現分數各種運算(加減乘除,餘,冪,個數中的較,較)

package Rational; import java.util.StringTokenizer; /** * @author SunKun * 分數四則運算 */ public class Calculator { int numerator; // 分子 int denominator

使用運算符 /號實現整數相除

reading tar math ati har pro cond return lin using System; using System.Collections.Generic; using System.Linq; using System.Text; using

個數組相同的元素,並且對應的個數一樣

contains println .get system void con main cnblogs highlight /** * 找出兩個數組相同的元素,並且對應的個數一樣 * @param args */ public static void

個數組中都有,並且重復次數多的元素

var In IT 兩個 code TE total urn des var itemA = [1, 2, 3, 3] var itemB = [3, 3, 2] var crossArr = []; var countArr = []; itemA.forEach((e

java中請給例子程序:找個數大公約數和小公倍數

strong big ont com 約數 計算 www main .html 9.2 找出12和8的最大公約數和最小公倍數。 (視頻下載) (全部書籍) public class Test { public static void main(String[]

給定個數組,這個數組是排序好的,讓你個數組合到一起之後第K的數。

返回 解題思路 題目 turn 中位數 max ear 給定 class 題目:給定兩個數組,這兩個數組是排序好的,讓你求這兩個數組合到一起之後第K大的數。 解題思路: 首先取得數組a的中位數a[aMid],然後在b中二分查找a[aMid],得到b[bMid],b[bSt]

設計一個演算法從數 A[1:n] 中同時找元素和元素,只需要超過 1.5n-2 次比較

題目:設計一個演算法從數A[1:n]中同時找出最大元素和最小元素,只需要不超過1.5n-2次比較。 #include <stdio.h> #define MIN -1 #define MAX 65535 void find_max_min( int num[], int len ) {

設計一個算法從數 A[1:n] 中同時找元素和元素,只需要超過 1.5n-2 次比較

number com str png 統計 最小 int 比較 技術分享 題目:設計一個算法從數A[1:n]中同時找出最大元素和最小元素,只需要不超過1.5n-2次比較。 #include <stdio.h> #define MIN -1 #define MAX

(03)從鍵盤輸入一個數個數的階乘,即 n!。

題目描述  從鍵盤輸入一個數,求出這個數的階乘,即 n!。 演算法思想 首先要清楚階乘定義,所謂 n 的階乘,就是從 1 開始乘以比前一個數大 1 的數,一直乘到 n,用公式表示就是:1×2×3×4×…×(n-2)×(n-1)×n=n! 具體

1.無序陣列中找個數使其和等於給定

碰到這種類似題目可以根據條件不同寫出不同時間複雜度的程式碼: 1.最暴力的遍歷,時間複雜度為O(n^2) 2.一般情況下先排序,再從兩邊向中間搜尋結果,時間複雜度為O(nlogn + n) int i = 0, j = numbers.size() - 1; while

個int型變數的使用if/:?/switch判斷語句

方法一: Max=(a+b+|a-b|)/2; Max=(a+b-|a-b|)/2; 方法二:通過加減運算和移位運算相結合 Min = a+(((b-a)>>31)&(b-a)); Max = a-(((a-b)>>31)&(a-b

演算法:個數大公約數小公倍數的方法

1、計算兩個整數的最大公約數方法有兩種 第一種是使用《九章算術》中的更相減損術方法,“以少減多,更相減損,求其等也,以等數約之,等數約之,即除也,其所以相減者皆等數之重疊,故以等數約之。”其大概意思就是“若分子、分母均為偶數時,可先被2除,否則,將分子與分母之數列在它處,然後以小數減大數,輾