2017-02-18 72 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。

這是非常遞歸的,它不能處理接近整數限制的數字,也不能在不修改的情況下處理負數。這不是一個完美的解決方案,但至少它足以幫助你在嚴格的數學之外開始思考。

相關問題