Содай калькулятор на языке Go
Калькулятор умеет выполнять операции сложения, вычитания, умножения и деления с двумя числами: a + b, a – b, a * b, a / b. Данные передаются в одну строку. Решения, в которых каждое число и арифметическая операция передаются с новой строки, считаются неверными.
Калькулятор умеет работать как с арабскими, так и с римскими числами.
Калькулятор должен принимать на вход числа от 1 до 10 включительно, не более. На выходе числа не ограничиваются по величине и могут быть любыми.
Калькулятор умеет работать только с целыми числами
go
func add(a, b int) int {
return a + b
}
Для вычитания:
go
func subtract(a, b int) int {
return a - b
}
Для умножения:
go
func multiply(a, b int) int {
return a * b
}
Для деления:
go
func divide(a, b int) int {
return a / b
}
2. Затем мы должны создать функцию, которая будет читать входную строку и вызывать соответствующую функцию на основе оператора. Мы также должны преобразовать входные числа из строкового формата в целочисленный формат.
go
func runCalculator(input string) int {
splits := strings.Split(input, " ")
a, _ := strconv.Atoi(splits[0])
b, _ := strconv.Atoi(splits[2])
operator := splits[1]
result := 0
switch operator {
case "+":
result = add(a, b)
case "-":
result = subtract(a, b)
case "*":
result = multiply(a, b)
case "/":
result = divide(a, b)
}
return result
}
3. Наконец, мы должны написать функцию main, которая будет вызывать функцию runCalculator и выводить результат.
go
func main() {
input := "2 + 3" // Пример входной строки
result := runCalculator(input)
fmt.Println(result)
}
Теперь мы можем запустить нашу программу и получить результат операции.
Однако, чтобы наш калькулятор мог работать как с арабскими, так и с римскими числами, нам нужно расширить нашу программу. Мы можем использовать условные операторы или map для проверки входных данных и преобразования чисел в необходимый формат.
Вот полный код для калькулятора, который работает с арабскими и римскими числами:
go
package main
import (
"fmt"
"strconv"
"strings"
)
func add(a, b int) int {
return a + b
}
func subtract(a, b int) int {
return a - b
}
func multiply(a, b int) int {
return a * b
}
func divide(a, b int) int {
return a / b
}
func runCalculator(input string) int {
splits := strings.Split(input, " ")
aStr := splits[0]
bStr := splits[2]
operator := splits[1]
var a, b int
isRoman := false
// Проверяем, являются ли числа арабскими или римскими
if _, err := strconv.Atoi(aStr); err == nil {
// Если число - арабское
a, _ = strconv.Atoi(aStr)
b, _ = strconv.Atoi(bStr)
} else {
// Если число - римское
isRoman = true
a = romanToDecimal(aStr)
b = romanToDecimal(bStr)
}
result := 0
switch operator {
case "+":
result = add(a, b)
case "-":
result = subtract(a, b)
case "*":
result = multiply(a, b)
case "/":
result = divide(a, b)
}
if isRoman {
return decimalToRoman(result)
}
return result
}
func main() {
input := "2 + 3" // Пример входной строки
result := runCalculator(input)
fmt.Println(result)
}
Код выше позволит нам работать с арабскими и римскими числами. Для преобразования римских чисел в арабские и арабских чисел в римские, нам понадобятся функции `romanToDecimal` и `decimalToRoman`, которые можно добавить к нашей программе:
go
func romanToDecimal(roman string) int {
romanValues := map[rune]int{
'I': 1,
'V': 5,
'X': 10,
// добавьте остальные символы римских чисел
}
decimal := 0
for i := 0; i < len(roman); i++ {
if i+1 < len(roman) && romanValues[rune(roman[i])] < romanValues[rune(roman[i+1])] {
decimal -= romanValues[rune(roman[i])]
} else {
decimal += romanValues[rune(roman[i])]
}
}
return decimal
}
func decimalToRoman(decimal int) string {
romanValues := map[int]string{
1: "I",
5: "V",
10: "X",
// добавьте остальные числа и символы римской системы
}
roman := ""
for decimal > 0 {
for value, symbol := range romanValues {
if decimal >= value {
decimal -= value
roman += symbol
break
}
}
}
return roman
}
Пожалуйста, обратите внимание, что символы римских чисел являются примерными, и для полноценной поддержки всех римских чисел вам может понадобиться расширить список в `romanValues`. Также функции преобразования римских чисел не обрабатывают проверку на правильность записи чисел, поэтому для корректной работы калькулятора с римскими числами необходимо вводить правильно записанные числа.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет