写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足
进阶:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度
class Solution: def Add(self, num1, num2): # write code here x=0xffffffff n1, n2 =num1&x, num2&x #负数变补码,正数不变 while n2: n1,n2=n1^n2, (n1&n2)<<1 &x return n1 if n1<=0x7fffffff else ~(n1^x)
class Solution: def Add(self, num1, num2): # write code here xornum = num1 ^ num2 andnum = (num1 & num2) << 1 while andnum: temp1 = xornum ^ andnum temp2 = (xornum & andnum) << 1 temp1 = temp1 & 0xFFFFFFFF xornum = temp1 andnum = temp2 return xornum if xornum <= 0x7FFFFFFF else xornum - 0x100000000
# -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2): # write code here return sum([num1,num2])
# -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2): s = [] s.append(num1) s.append(num2) return sum(s)
# -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2): # write code here return sum([num1, num2])
# -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2): a=num1 b=num2 a&=0xFFFFFFFF b&=0xFFFFFFFF while b: carry=a&b a^=b b=((carry)<<1)&0xFFFFFFFF return a if a<0x80000000 else ~(a^0xFFFFFFFF) # write code here
class Solution: def Add(self, num1, num2): # write code here # 异或、与(与计算考虑进位)之和 xorNum = num1 ^ num2 # 不考虑进位 andNum = (num1 & num2)<<1 # 考虑进位 while andNum!=0: # 若果没有进位的话直接输出结果 tmp1 = xorNum ^ andNum tmp2 = (xorNum & andNum)<<1 tmp1 = tmp1 & 0xFFFFFFFF # 为了避免负数过大,取前32位 xorNum = tmp1 andNum = tmp2 return xorNum if xorNum<=0x7FFFFFFF else ~(xorNum^0xFFFFFFFF)
# -*- coding:utf-8 -*- class Solution: def yihuo(self,num1,num2): #第一步首先是各位的一个异或,实现各位相加但是不进位,将其转化为二进制形式 #其中0和0,还有1和1都是0;1和0,以及0和1都是1.所以我们采用异或的方法 return num1 ^ num2 def yu(self,num1,num2): #第二步分为一个位与运算,然后向左移动一位;因为第二步中不管是0和0,1和0,0和1都不会 #产生进位,只有1和1才产生进位,所以采用的是与运算,然后向左移动一位 return (num1 & num2)<<1 def Add(self, num1, num2): if num1==None&nbs***bsp;num2==None: return -1 while(num2): #以num2作为循环条件 #此时result也可以当作第一步和第二步的和,是一个异或 result=self.yihuo(num1,num2) #计算进位 num2=self.yu(num1,num2) #求负数的补码 num1=result & 0xffffffff #return里需要小心-1的情况,因为-1=1111 1111 1111 1111 1111 1111 1111 1111(二进制) return num1 if num1>>31==0 else num1-4294967296
# -*- coding:utf-8 -*- # 解题思路:位运算实现加法,两个数按异或得到低位,两个数按位与左移一位得到进位,重复前两步直到进位为0 class Solution: def Add(self, num1, num2): if not num1: return num2 if not num2: return num1 while num2 != 0: n1 = num1 ^ num2 n2 = (num1 & num2) << 1 num1 = n1 & 0xFFFFFFFF num2 = n2 return num1 if num1 >> 31 == 0 else num1 - 4294967296
# -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2): # num1 ^ num2: 无进位加法结果 # (num1 & num2) << 1 : 进位位 # 当进位为0时加法结束 # 0xFFFFFFFF是32位的1,python内部不会检查溢出所以要手动检查,这里视为无符号整数检查 # 若和的二进制形式小于最大正整数限制(有符号数0x7FFFFFFF)则直接返回 # ~(num1 ^ 0xFFFFFFFF): 取反加一的逆运算(原码变补码),负数的情况 while num2: num1, num2 = (num1 ^ num2) & 0xFFFFFFFF, ((num1 & num2) << 1) & 0xFFFFFFFF return num1 if num1 <= 0x7FFFFFFF else ~(num1 ^ 0xFFFFFFFF)
def Add(self, num1, num2): while num2!=0: temp=(num1 & num2)<<1 num1=num1 ^ num2 num2=temp return num1 def Add2(self, num1, num2): while num2!=0: temp=num1 ^ num2 num2=(num1 & num2)<<1 num1=temp&0xFFFFFFFF return num1 if num1>>31==0 else num1-4294967296
class Solution: def Add(self, num1, num2): # write code here if not num1: return num2 elif not num2: return num1 while num2: num1,num2 = (num1^num2)&0xFFFFFFFF, (num1&num2)<<1 if num1>>31 ==0: return num1 else: return num1 - pow(2,32)
# -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2): # write code here return sum(list([num1,num2]))