我正在通过尝试如下解决问题来学习python。
计算两个整数a和b的总和,但不允许使用运算符+和 - 。
实施例: 给定a = 1且b = 2,返回3.
我提出的以下解决方案适用于正整数但如果a = -1且b = 1则不起作用。
我想知道你如何处理负值。
$ ./bin/fgetsspace
enter string: my dog has fleas
buffer: my dog has fleas (16 chars)
my
dog
has
fleas
enter string: my cat has none
buffer: my cat has none (15 chars)
my
cat
has
none
enter string: bye
答案 0 :(得分:1)
如果您真的想学习Python,还有很多其他方法可以找到两个数字的总和。使用按位运算符只能教你所涉及的算法,哪种IMO不是开始学习任何语言的好方法;因此,我的回答不会涉及任何按位操作。
这里有很多方法可以在不使用内置Python功能的plus(" +")运算符的情况下添加:
a = 1
b = 2
# The "sassy" way as suggested by miradulo, uses the built in function `sum()`
print(sum((a, b)))
# uses a's __add__ magic method to add with b
print(a.__add__(b))
# similar to the previous, but directly uses int's __add__ instead
print(int.__add__(a, b))
# uses the add operator as a function, equivalent to `anything + anything`
from operator import add
print(add(a, b))
# they all return '3'
答案 1 :(得分:0)
要解决您的方法,您应该检查哪些值不起作用,并以某种方式捕获它们(例如,if a == -1 and b == 1
)
编辑: BOi 和 hotspring 指出,只有当a和b有不同的符号时才会失败。你可以添加一个减法函数(参见另一个答案)并将其用作Substract(a, -b)
如果< 0 x或b< 0
另一种可能的方法 - 缓慢但容易 - 可能如下:
答案 2 :(得分:0)
我明白了。不使用内置函数的解决方案,例如sum()
。首先,在没有 - 运算符的情况下定义要减去的函数。然后你可以用它来解决它。你走了!:
def getSum(a, b):
negative_number = None
if a == 0:
return b
elif b == 0:
return a
if a < 0 and b < 0:
pass
elif a < 0:
negative_number = a
elif b < 0:
negative_number = b
if (a < 0 and b < 0) and abs(a) == abs(b):
return int("-%s" % (str(getSum(abs(a), abs(b)))))
elif abs(a) == abs(b) and (a < 0 or b < 0):
return 0
elif negative_number != None:
x = getSum(abs(a), abs(b))
if x > 2*abs(negative_number):
return subtract(getSum(abs(a), abs(b)), 2*abs(negative_number))
else:
return subtract(2*abs(negative_number), getSum(abs(a), abs(b)))
while b != 0:
carry = a&b
a = a^b
b= carry<<1
return a
def subtract(x, y): #Subtraction function without - operator.
while (y != 0):
borrow = (~x) & y
x = x ^ y
y = borrow << 1
return x
print (getSum(-15, 16)) #Substitute -15 and 16 for any values to find the sum
现在尝试你想要的任何可能性。它应该适用于大多数数字,除了我会攻击的一些极端情况,我会尽快发布完整的解决方案。