Сложение цифр двузначных чисел: примеры на Python
При работе с числами в Python часто требуется найти сумму составляющих его цифр. Для двузначного числа (от 10 до 99) это особенно просто. В этой статье разберём несколько способов вычисления суммы цифр, от самого эффективного до альтернативных.
Основной способ: деление нацело и остаток
Наиболее эффективный метод использует целочисленное деление (//) и остаток от деления (%). Первое действие - отделить десятки от единиц. Для числа n десятки: n // 10, единицы: n % 10. Сумма: n // 10 + n % 10.
# Пример для числа 47
n = 47
sum_digits = n // 10 + n % 10
print(sum_digits) # Вывод: 11сумма трех чисел python (сумма трех чисел в python)
Пояснение:
n // 10- целая часть от деления на 10, для 47 это 4.n % 10- остаток, для 47 это 7.- Сложение даёт 4+7=11.
Возможные проблемы и ошибки:
- Использование обычного деления
/вместо//- получится дробное число (4.7), что не подходит для сложения с целым. - Если число не двузначное (например, 5 или 100), метод всё равно сработает, но для однозначного числа десятки будут 0, для трёхзначного - сумма будет не просто десятки+единицы, а сотни+десятки+единицы. Для универсальности лучше использовать цикл.
Когда использовать:
Этот способ идеален, когда точно известно, что число двузначное. Он быстр и не требует преобразования типов.
Как использовать строковое представление числа?
Преобразуем число в строку, затем берём каждый символ и преобразуем обратно в целое число.
n = 73
s = str(n)
sum_digits = int(s[0]) + int(s[1])
print(sum_digits) # 10Python программы вычисления (программы для вычислений на python)
Проблемы:
- Работает только для двузначных чисел. Если число может быть другой длины, нужно писать цикл по строке.
- Избыточное преобразование типов, что может быть медленнее арифметического метода.
Когда использовать:
Этот метод полезен, когда требуется не только сумма, но и доступ к каждой цифре как к символу, или когда число изначально пришло как строка.
Как вычислить сумму цифр с помощью цикла while?
Универсальный способ для любого целого числа: извлекаем последнюю цифру (остаток от деления на 10) и добавляем к сумме, затем отбрасываем последнюю цифру (целочисленное деление на 10). Повторяем, пока число не станет 0.
n = 85
sum_digits = 0
while n > 0:
sum_digits += n % 10
n //= 10
print(sum_digits) # 13
программа суммы на python (программа для вычисления суммы на python)
Проблемы:
- Оригинальное значение n теряется. Если нужно сохранить число, копируйте его в другую переменную.
- Для отрицательных чисел цикл не выполнится (n > 0 ложно). Нужно предусмотреть обработку абсолютного значения.
Когда использовать:
Когда число может быть любой длины (трёхзначное, четырёхзначное и т.д.) или точное количество цифр неизвестно.
Как использовать функции map и sum?
Однострочная запись, сочетающая строковое преобразование с функциональным подходом.
n = 92
sum_digits = sum(map(int, str(n)))
print(sum_digits) # 11
Пояснение:
str(n) превращает число в строку '92', map(int, ...) применяет функцию int к каждому символу, возвращая последовательность чисел [9, 2], а sum() складывает их.
Проблемы:
- Также работает для чисел любой длины, но требует преобразования в строку. Может быть медленнее арифметического цикла.
- Необходимо помнить, что строка может содержать знак минуса; для отрицательных чисел
int('-')вызовет ошибку. Лучше брать модуль числа.
Когда использовать:
Когда требуется лаконичный код и не критична производительность. Подходит для скриптов и прототипов.
Расширенные примеры помогут закрепить понимание различных подходов и их применения в реальных задачах.
Пример 1. Функция суммы цифр для любого целого числа (включая отрицательные)
def digit_sum(n):
n = abs(n)
s = 0
while n:
s += n % 10
n //= 10
return s
print(digit_sum(123)) # 6
print(digit_sum(-504)) # 9 (считается 5+0+4)
print(digit_sum(0)) # 0
6 9 0
Пример 2. Вычисление суммы цифр для списка двузначных чисел
numbers = [34, 78, 21, 99]
for num in numbers:
sum_d = num // 10 + num % 10
print(f"{num}: {sum_d}")
34: 7 78: 15 21: 3 99: 18
Пример 3. Использование ввода пользователя с проверкой на двузначность
try:
value = int(input("Введите двузначное число: "))
if 10 <= value <= 99:
s = value // 10 + value % 10
print(f"Сумма цифр: {s}")
else:
print("Число не является двузначным")
except ValueError:
print("Введено не число")
Введите двузначное число: 56 Сумма цифр: 11
Пример 4. Сравнение производительности методов (для 1 млн вызовов)
import time
n = 47
start = time.perf_counter()
for _ in range(1_000_000):
s = n // 10 + n % 10
end = time.perf_counter()
print(f"Арифметический: {end - start:.4f} сек")
start = time.perf_counter()
for _ in range(1_000_000):
s = int(str(n)[0]) + int(str(n)[1])
end = time.perf_counter()
print(f"Строковый: {end - start:.4f} сек")
start = time.perf_counter()
for _ in range(1_000_000):
s = sum(map(int, str(n)))
end = time.perf_counter()
print(f"Map+sum: {end - start:.4f} сек")
Арифметический: 0.0891 сек Строковый: 0.1523 сек Map+sum: 0.2125 сек
Пример 5. Обработка отрицательных чисел с помощью модуля
def digit_sum_abs(n):
total = 0
n = abs(n)
while n:
total += n % 10
n //= 10
return total
print(digit_sum_abs(-89)) # 17
17
Пример 6. Использование рекурсии для образовательных целей
def recursive_sum(n):
if n == 0:
return 0
return n % 10 + recursive_sum(n // 10)
print(recursive_sum(48)) # 12
12