← Назад к вопросам

Калькулятор (тестовое задание)

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 и римскими цифрами
  • При делении римских - результат вниз
  • Корректная обработка ошибок

Решение базовое (арабские цифры)

Алгоритм:

  1. Split выражение по пробелам
  2. Валидируем формат: число оператор число
  3. Вычисляем результат
  4. Обрабатываем ошибки (деление на 0, неверные числа)

Приоритет операций:

  • Сначала * и /
  • Потом + и -

Примеры: 8 / 2 + 3 = 4 + 3 = 7 2 + 2 * 2 = 2 + 4 = 6

Решение полное (с римскими)

Шаг 1: Определяем тип чисел (арабские или римские)

Шаг 2: Конвертируем в целые числа

  • Арабские: strconv.Atoi
  • Римские: ParseRoman

Шаг 3: Вычисляем результат

Шаг 4: Конвертируем результат обратно

  • Если были арабские: выводим число
  • Если римские: ConvertToRoman

Проверки при парсинге

  1. Выражение содержит ровно 3 элемента (число оператор число)
  2. Числа в диапазоне 1-10
  3. Оператор один из +, -, *, /
  4. Все числа одного типа (либо все арабские либо все римские)

Примеры ошибок

Панику вызывают:

  • "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 алгоритм: берем максимальное значение которое подходит, вычитаем, повторяем