求兩個int之間較小的數

2021-05-27 15:29:07 字數 1051 閱讀 6198

主要**於這個帖子:

相關的還有這個帖子:

要求是不用比較,不用if,不用第三方函式,不用內嵌彙編,不用遞迴,求兩個int之間較小的那個。

42樓的方法:

#include // 要求實現的函式

int min(int a, int b)

// 測試**

int main(void)

雖然這個方法在溢位上貌似還有點問題,但是這個想法我是想不到了,記錄下來。。。

還有66樓的式子:

(b*(a/b) + a*(b/a))/(a/b + b/a);
我居然是看了很久才看懂這個式子,真是慚愧。

但是這個式子在a、b是相反數(3和-3),a、b某乙個為0的時候,還是不能滿足要求。但是利用了int 的除法特性,記錄下來。。。

還有105樓,據說是所有解法當中最好的乙個(但是仍然沒有符合要求):

//研究出來了,

#define sign(x) ((x)>>31&1)

int min(int a, int b)

;return ba[sign(a)+1-sign(b)+sign(a-b)>>1];

}//還有一種解法:

int min(int a, int b)

;return babbaaba[sign(a)][sign(b)][sign(a-b)];

}

還有這個辦法:

c/c++ code

inta =3

, b =4

;intm[2

];int

bigger;m[0

] =a;m[1]

=b;bigger

=m[(a-b)

>>

31];

如果a>b,則a-b的二進位制表示中最高位為0,(a-b)>>31 = 0;bigger = m[0];

如果a>31 = 1;bigger = m[1];

求兩個Date之間的天數

利用jdk1.8的新特性,chronounit類獲取兩個日期之間的天數只差 chronounit是乙個列舉類,有一組標準的時間週期為單元的列舉值,它的列舉值是不變的,執行緒安全的。使用between 方法獲取兩個日期之間的天數差,當然不僅僅可以獲取天數差,可以獲取這個列舉類中任意乙個給出的時間單元的...

求兩個年份之間閏年的數目

最開始碰到的是這個問題,求給定的兩個數之間能同時被2,3,5整除的數,可以發現如果乙個數能同時被2,3,5整除,那麼它肯定可以被30整除。我們可以編寫乙個函式判斷乙個數是否可以被30整除,然後遍歷給定的兩個數中的區間逐個地判斷就可以了。解法一 bool isnums int num int calc...

求兩個矩形之間的最小距離

正在參與的工程裡有乙個小功能是求兩個矩形之間的最小距離。大致翻了一下opencv,貌似沒看到現成的函式,那就自己寫乙個好了。1 不相交,但在x或y軸方向上有部分重合座標,比如矩形1和2,此時,最小距離為兩個矩形之間的最小平行距離或垂直距離,如圖中紅色箭線d12所示。2 不相交,在x和y軸方向上均無重...