2017-02-18 71 views
-9

我在大学学习Scala语言,并且作为“函数作为数据”主题的作业,他要求我们写一个函数plus(x ,y)≡x+ y而不使用操作+。在没有使用操作的情况下实现函数加(x,y)≡x+ y +

def plus (x: Int, y: Int): Int = ??? 

我该如何开始思考解决这个问题?

+0

听起来像递归课程。我猜你可以使用+1和-1,但没有别的。是吗? – naomik

+1

显然你应该使用'42. $ plus(13)'。这个教训是关于名称改变的,名称代表什么。语言哲学,对吧? –

+3

“有什么想法?”自己做作业吗?说真的,你为什么要别人为你做呢?你在找什么?一个完整的答案(如果是这样,为什么)?我们可以提供更多关于您可以使用的信息。如果(看起来像一个常见的任务),你可以允许按位运算符,看到这里http://stackoverflow.com/questions/4068033/add-two-integers-using-only-bitwise-operators –

回答

1

我不知道你的教授何意,但一个简单的方法来做到这仅仅是减去的y负:

def plus (x: Int, y: Int): Int = x - -y 
+0

谢谢,我会问他他的意思。 –

0

你总是可以通过位非礼:

1 )AND X和Y一起变成一个不同的变量(c):

2)根据你的端序位移位(c)一位(左/右)。检查0值。

3)XOR和Y一起变成另一变量(d)。如果第2步是一个零值,这是你的正确答案。

如果步骤2不是一个零值:

4)(c)和(d)重复1-3。

这是非常递归的,它不能处理接近整数限制的数字,也不能在不修改的情况下处理负数。这不是一个完美的解决方案,但至少它足以帮助你在严格的数学之外开始思考。

相关问题