2017-02-18 30 views
-9

Я изучаю язык Scala в университете и в качестве домашней работы для темы «Функции как данные» он попросил нас написать функцию plus (x , y) ≡ x + y без использования операции +.Реализация функции plus (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) И X и Y вместе в другую переменную (c):

2) Сдвиг бит (c) один бит на (влево/вправо) в зависимости от вашего конца. Проверьте значение 0.

3) XOR X и Y вместе в другую переменную (d). Если шаг 2 был нулевым значением, это ваш правильный ответ.

Если шаг 2 не нулевое значение:

4) Повторить 1-3 на (с) и (г).

Это очень рекурсивно, и он не может обрабатывать числа, которые подходят к пределу целого числа, а также не обрабатывать отрицательные числа без изменений. Это не идеальное решение, но, по крайней мере, этого достаточно, чтобы помочь вам задуматься о понятиях вне строгой математики.

 Смежные вопросы

  • Нет связанных вопросов^_^