Сбалансированное число
У меня есть задача.
Написать функцию balanced_num, которая определяет является ли заданное сбалансированным, т.е.
сумма цифр справа и слева от середины равны (abcde ==> a + b == d + e; abcdef ==> a + b == e + f)
Примеры:
balanced_num(2222) ==> True balanced_num(135622) ==> True
Задача может показаться тривиальной , но я не могу понять имеет ли смысл приводить входные данные к строке и вводить анонимную функцию для разбиения чисел по группам для нахождения сумм ?
Ответы (1 шт):
Мне кажется, использовать лямбда функции для данной задачи неуместно, т.к. они получатся длинными и нечитаемыми.
Использовать обычные функции будет более целесообразно.
Вариант решения с преобразованием числа в строку:
def sum_of_digits(num):
return sum(map(int, str(num)))
def is_balanced(num):
num_str = str(num)
mid_idx = len(num_str) // 2
return (sum_of_digits(num_str[:mid_idx])
==
sum_of_digits(num_str[mid_idx + len(num_str) % 2:]))
Численный вариант решения:
from math import log10, ceil
def sum_of_digits(num):
res, n = 0, int(num)
while n > 0:
res += n % 10
n //= 10
return res
def is_balanced(num):
num_len = ceil(log10(num))
left_num = num // 10 ** (num_len // 2 + num_len % 2)
right_num = num % ( 10 ** (num_len // 2))
return (sum_of_digits(left_num)
==
sum_of_digits(right_num))