Ошибка в подсчёте сложного процента

Условие задачи: Процентная ставка по вкладу составляет P процентов годовых, которые прибавляются к сумме вклада через год. Вклад составляет X рублей Y копеек. Определите размер вклада через K лет.

Формат вывода: Программа должна вывести два числа: величину вклада через K лет в рублях и копейках. Дробное число копеек по истечение года отбрасывается. Перерасчет суммы вклада (с отбрасыванием дробных частей копеек) происходит ежегодно.

Проблема: Не получается увидеть ошибку подсчёта. По идее не отбрасывается дробная часть копеек но не вижу этого в коде. Прошу помощи!

Код:

p = float(input()) # Годовая процентная ставка
x = int(input())   # К-во рублей вклада
y = int(input())   # К-во копеек вклада
k = int(input())   # Строк вклада
i = 0              # Счётчик лет

kopT = (x * 100) + y  # Переводим сумму вклада в копейки
kop = 0               # Сумма вклада с процентами по прошествию і года
while i <= k:         

    kop = int(kopT + kopT / 100 * p) # Сумма вклада + годовой процент
    x = kop // 100                   # К-во рублей 
    y = int(kop % 100)               # К-во копеек без дробной части
    kopT = (x * 100) + y             # Переводим сумму вклада с проц. в копейки
    i += 1                           # Добавляем год

print(x, y)                          # Выводим сумму в рублях и копейках итого

Ответы (1 шт):

Автор решения: Xander

Сами вычисления у вас правильные.

Проблема возникает из-за того, что условие

while i <= k:  

у вас допускает i равные 0, 1, 2, 3, 4, 5 - то есть цикл у вас выполняется 6 раз вместо 5.

Замените строчку на

while i < k:

и в результате получите ожидаемые 315 43

И кстати, задачи с рублями и копейками часто решать гораздо проще, если не таскать весь код с собой рубли, а сразу перевести их в копейки, считать всё только в копейках и только перед выводом привести их обратно к рублям и копейкам:

p = 12 # Годовая процентная ставка
x = 179   # К-во рублей вклада
y = 0   # К-во копеек вклада
k = 5   # Строк вклада

sy = 100 * x + y  # Сумма только в копейках

for i in range(k):
    sy += int(sy * p / 100)

print(sy // 100, sy % 100)
→ Ссылка