← Назад к вопросам
Калькулятор (тестовое задание)
1.0 Junior🔥 141 комментариев
#Основы Go
Условие
Создайте консольный калькулятор на языке Go, который принимает строку с арифметическим выражением и выводит результат.
Требования
- Поддержка операций: +, -, *, /
- Поддержка арабских цифр от 1 до 10 включительно
- Корректная обработка ошибок
- Приоритет операций (* и / выше + и -)
Примеры
Ввод: 2 + 2
Вывод: 4
Ввод: 10 * 5
Вывод: 50
Ввод: 8 / 2 + 3
Вывод: 7
Бонус
- Поддержка римских цифр (I, II, III, IV, V...)
- При делении римских чисел результат округляется вниз
Это реальное тестовое задание Kata Academy
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Калькулятор - реальное тестовое от Kata Academy
Описание задачи
Реализовать калькулятор который:
- Парсит арифметическое выражение
- Поддерживает +, -, *, / с правильным приоритетом
- Работает с араб 1-10 и римскими цифрами
- При делении римских - результат вниз
- Корректная обработка ошибок
Решение базовое (арабские цифры)
Алгоритм:
- Split выражение по пробелам
- Валидируем формат: число оператор число
- Вычисляем результат
- Обрабатываем ошибки (деление на 0, неверные числа)
Приоритет операций:
- Сначала * и /
- Потом + и -
Примеры: 8 / 2 + 3 = 4 + 3 = 7 2 + 2 * 2 = 2 + 4 = 6
Решение полное (с римскими)
Шаг 1: Определяем тип чисел (арабские или римские)
Шаг 2: Конвертируем в целые числа
- Арабские: strconv.Atoi
- Римские: ParseRoman
Шаг 3: Вычисляем результат
Шаг 4: Конвертируем результат обратно
- Если были арабские: выводим число
- Если римские: ConvertToRoman
Проверки при парсинге
- Выражение содержит ровно 3 элемента (число оператор число)
- Числа в диапазоне 1-10
- Оператор один из +, -, *, /
- Все числа одного типа (либо все арабские либо все римские)
Примеры ошибок
Панику вызывают:
- "2 + 2 +" - не 3 элемента
- "2 + a" - не число
- "0 + 2" - число не в диапазоне 1-10
- "2 + II" - смешанные типы
- "a + b" - невалидные римские
Сложность
- Time: O(1) - фиксированное количество элементов (3)
- Space: O(1) - константное количество переменных
Валидация номала:
- ParseRoman: O(1) - максимум 10 символов
- ConvertToRoman: O(1) - результат максимум из нескольких символов
Особенности при делении
Для римских чисел: 5 / 2 = II (не II.5) Используем целочисленное деление /
Для арабских: просто целое число
Хранение таблицы римских
Array структур: value -> roman 10: X 9: IX 5: V 4: IV 1: I
Для конвертации используем greedy алгоритм: берем максимальное значение которое подходит, вычитаем, повторяем