Здравствуйте, не понимаю почему не работает код в питоне, посмотрите, пожалуйтса

Нужно посчитать сколько существует двузначных чисел, у которых сумма цифр равна сумме цифр при умножение на 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. Числа должны быть двузначные, а цикл у вас от 1 for i in range(1, 100). Должен быть от 10.
  2. 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))
→ Ссылка