题目:
对于两个32位整数a和b,请设计一个算法返回a和b中较大的。但是不能用任何比较判断。若两数相同,返回任意一个。给定两个整数a和b,请返回较大的数。
测试用例:
输入:1,2
输出:2
思路:
不能用比较运算符,那么就相减之后看正负。如果a-b为正,那么a>b;反之a<b。需要注意的是如果a,b符号不同,相减可能溢出,所以需要提前对符号进行判断。
代码:
class Compare:
def getMax(self, a, b):
# write code here
# 右移31位后,第0位即为符号位。以此判断a,b符号,如果一正一负,直接返回正数
pos1, pos2 = ((a>>31)&1) == 0, ((b>>31)&1) == 0
if pos1 and not pos2:
return a
elif not pos1 and pos2:
return b
else: # 否则判断a-b的正负
pos = (((a-b)>>31)&1) == 0
if pos:
return a
else:
return b