主要**於這個帖子:
相關的還有這個帖子:
要求是不用比較,不用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軸方向上均無重...