1. 程式人生 > >Python編程之算法練習_003

Python編程之算法練習_003

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