Извлекайте цифры остатком от деления и записывайте с конца буфера. Отрицательное представление позволяет обработать MinInt без переполнения.
Конвертация целого числа в строковое представление
Извлекайте цифры остатком от деления и записывайте с конца буфера. Отрицательное представление позволяет обработать MinInt без переполнения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию, которая преобразует целочисленное значение (int) в его десятичную строковую форму (string). При решении нельзя пользоваться готовыми функциями преобразования, такими как strconv.Itoa, fmt.Sprintf и аналогичными. Кроме того, использование strings.Builder тоже запрещено. Пример: 123 → "123"
func intToString(n int) string {
// реализуй
}
Ответ
Извлекайте цифры остатком от деления и записывайте с конца буфера. Отрицательное представление позволяет обработать MinInt без переполнения.
Реализация без импортов:
func intToString(n int) string {
if n == 0 { return "0" }
negative := n < 0
if n > 0 { n = -n }
var buffer [20]byte
pos := len(buffer)
for n != 0 {
pos--
buffer[pos] = byte('0' - n%10)
n /= 10
}
if negative {
pos--
buffer[pos] = '-'
}
return string(buffer[pos:])
}
Буфера хватает для 32- и 64-битного int со знаком. Не берём положительный модуль отрицательного MinInt: он не представим в том же типе. Время пропорционально числу цифр, рабочая память фиксирована.