При таком контракте обработка знака и дробной части не нужна. Можно суммировать остатки от деления на 10, уменьшая число целочисленным делением.
Что лишнее в sum_digits для неотрицательного числа
При таком контракте обработка знака и дробной части не нужна. Можно суммировать остатки от деления на 10, уменьшая число целочисленным делением.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
По контракту sum_digits принимает неотрицательное целое. В реализации есть преобразование в строку, обработка минуса и дробной части. Как упростить функцию и сохранить случай нуля?
Ответ
При таком контракте обработка знака и дробной части не нужна. Можно суммировать остатки от деления на 10, уменьшая число целочисленным делением.
Пример Python:
def sum_digits(n):
total = 0
while n:
total += n % 10
n //= 10
return total
Для 0 результат равен 0. Если вход приходит из внешнего API, валидируйте контракт на границе; удаление недостижимых веток не означает отказ от проверки непроверенных данных.