计算两个正整数或负整数之和

时间:2018-04-22 06:45:11

标签: python

我正在通过尝试如下解决问题来学习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

3 个答案:

答案 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

另一种可能的方法 - 缓慢但容易 - 可能如下:

  1. 查看第二个操作数是否为负数。
  2. 如果不是(这意味着,如果 b为正),则递增a和递减b,直到b为零。
  3. 如果是(这意味着,如果 b为负),则递减a并递增b,直到b为零。

答案 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

现在尝试你想要的任何可能性。它应该适用于大多数数字,除了我会攻击的一些极端情况,我会尽快发布完整的解决方案。