Python編程之算法練習_003
阿新 • • 發佈:2018-04-08
col eth ces python編程 兩個 ima return pan func
題目:給定兩個32位整數a和b,返回a和b中較大的。要求:不用任何比較判斷。
不寫原理,直接上推導圖表:
代碼:
# 不用任何比較判斷找出兩個數中較大的數 import random def flip(x): return x^1 #待測試方法 def binCompare(x,y): z = x - y sigX = flip((x>>31)&1) sigY = flip((y>>31)&1) sigZ = flip(((z>>31)&1)) sigXYSam = flip(sigX^sigY) sigXYDiff= sigX^sigY func = sigXYSam*sigZ + sigXYDiff*sigX return func*x + flip(func)*y #常規正確方法 def normalMethod(x,y): return max(x,y) #對數器 def Compare(x,y): return True if x == y else False nCount = 0 maxValue = 1000000 #一百萬次 while nCount <= maxValue: x = random.randint(-1000000, 1000000) #正負一百萬之間的隨機數y = random.randint(-1000000, 1000000) binFunResult = binCompare(x,y) normalFunResult = normalMethod(x,y) if not Compare(binFunResult, normalFunResult): print("Fucked.") print("Sample:({},{})".format(x,y)) break nCount += 1 else: print("Success.")
Python編程之算法練習_003