Напишите функцию или программу, которые могут выполнять простую арифметику (сложение, вычитание, умножение и деление) как в базе 10, так и в базе 2.
Функция будет принимать математическое выражение в качестве входных данных и выводить правильный результат в правильной базе. На входе будут n
числа, разделенные одним или несколькими операторами ( + - * /
).
Если все входные значения содержат только 0 и 1, все значения считаются двоичными. Если хотя бы одна цифра равна 2-9
, все значения считаются основанием 10.
Правила:
- Можно предположить, что между числами будет только один оператор (
10*-1
не появится) - Вы можете предположить, что не будет скобок.
- Обычный приоритет оператора (попробуйте выражение в Google Calculator, если у вас есть сомнения).
- Вы не можете предполагать, что будут только целые числа
- Не будет начальных нулей на входе или выходе
- Вы можете предполагать, что будет дан только верный ввод
- Можно предположить, что все входные значения положительны (но оператор минус может сделать возможным отрицательный вывод,
1-2=-1
и10-100=-10
) - REPL не принимается
- Вы можете взять входные данные как отдельные аргументы, или в качестве единственного аргумента, но вход должен быть в правильном порядке.
- Т.е. вы можете представить
1-2
с входными аргументами1
,-
,2
, но не1
,2
,-
.
- Т.е. вы можете представить
- Вы должны принять символы
+ - * /
на входе, а неplus
иminus
т. Д. - Вы должны поддерживать значения с плавающей запятой (или до максимального ограничения вашего языка, однако поддержка только целых чисел не принимается).
eval
принято
Примеры:
1+1
10
1010+10-1
1011
102+10-1
111
1+2+3
6
10*10*10
1000
11*11*11
11011
10*11*12+1
1321
10.1*10.1
110.01
20.2*20.2
408.04
10/5
2
110/10
11
Also accepted (optional line or comma-separated input):
10
+
10
-
1
11 <-- This is the output
Это код гольфа, поэтому выиграет самый короткий код в байтах.
110/10
, является11.0
приемлемым?