2017-02-18 1 views
-9

저는 스칼라 언어를 대학에서 배우고 있으며 "함수는 데이터"주제의 숙제로 plus (x , y) ≡ x + y.함수를 사용하지 않고 plus (x, y) ≡ x + y를 구현 +

이 작업을 해결하기 위해 어떻게 생각해야할까요?

+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) 그리고 X와 Y를 함께 다른 변수 (c)로 합치십시오.

2) 엔디안에 따라 비트가 1 비트 씩 (왼쪽/오른쪽) 이동합니다. 0 값을 확인하십시오.

3) XOR X 및 Y를 함께 다른 변수 (d)로 변환. 2 단계가 0 값인 경우 정답입니다.

단계 2 0 값 아니라면 :

4) (c)와 (d)에 1-3을 반복한다.

이것은 매우 재귀 적이며 정수의 한도에 접근하는 숫자를 처리 할 수 ​​없으며 수정하지 않고 음수를 처리 할 수도 없습니다. 완벽한 솔루션은 아니지만 적어도 엄격한 수학 이외의 측면에서 생각하기 시작하는 데는 도움이됩니다.

관련 문제