Здравствуйте, не понимаю почему не работает код в питоне, посмотрите, пожалуйтса
Нужно посчитать сколько существует двузначных чисел, у которых сумма цифр равна сумме цифр при умножение на n (1<=n<=10) Например : (При умножении двузначных чисел на 2 не меняют сумму цифр такие числа: 18 27 36 45 54 63 72 81 90 99.)
Мне кажется, что вроде всё правильно написал, а программа работает неверно. При вводе n=2 должно выдавать: 10
n = int(input())
counter = 0
for i in range(1, 100):
o = i // 10
d = i % 10
o_1 = (n * i) // 10
d_1 = (n * i) % 10 #36 72
if i * n < 100:
if d + o == d_1 + o_1:
counter += 1
else:
s_1 = (n * i) // 10 % 10 #104
if d + o == d_1 + o_1 + s_1:
counter += 1
print(counter)
Ответы (3 шт):
Автор решения: GrAnd
→ Ссылка
Я вижу 2 ошибки.
- Числа должны быть двузначные, а цикл у вас от 1
for i in range(1, 100). Должен быть от 10. s_1вы считаете неправильно. Т.к. программа попала в этотelseблок, то для трехзначного числа у васo_1будет больше или равен 10. Тогдаs_1(совсем старшая цифра) должна считаться отo_1как результат дальнейшего деления на 10. Аo_1(средняя цифра) - её нужно пересчитать как остаток от деления её же на 10.
s_1 = o_1 // 10
o_1 = o_1 % 10
Либо, если оставить вашу формулу для s_1 как есть, тогда она олицетворяет среднюю цифру, и o_1 надо высчитать для старшей:
o_1 = (n * i) // 10 // 10
Автор решения: xmikex
→ Ссылка
Не проще в отдельной функции сделать подсчет суммы то? Примерно так вот
def sumnum(i):
sum=i%10
temp=i//10
while(temp):
sum+=temp%10
temp=temp//10
return sum
n = int(input())
counter = 0
for i in range(10, 100):
if (sumnum(i)==sumnum(i*n)):
print("%d %d %d"%(i,i*n,sumnum(i)))
counter+=1
print(counter)
Автор решения: TigerTV.ru
→ Ссылка
Можно так, дополнительно выводятся числа:
def sum_digits(number):
res = 0
while number:
res += number % 10
number //= 10
return res
n = int(input())
nums = list(filter(lambda i: sum_digits(i) == sum_digits(i * n), range(10, 100)))
print(nums)
print(len(nums))