Кодом расчёта аннуитетных платежей не проходит тесты

r = int(input())
p = int(input())
m = int(input())
i = (p/100)/12
k = (i*(i+1)**m)/((i+1)**m-1)
print(k*r*m-r)

в чём проблема кода? Почему он не прошёл некоторые тесты на silvertests?


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

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

почему формула может не пройти

  1. вводят неверные значения - например треш из букв или отрицательные значения, а код этой ситуации никак не отрабатывает

  2. вводят p = 0 или m = 0, что вызывает деление на 0

  3. вводят числа с плавающей запятой, а вы их принимаете как целочисленные, в результате будут неправильные вычисления

в чём проблемма кода? Почему он не прошёл некоторые тесты на silvertests?

я склоняюсь к 3)

→ Ссылка
Автор решения: vp_arth

Если финальный результат - аннуитетный платёж, то он не корректен

r = 1_000_000
p = 10
m = 12
i = (p/100)/12

k = (i*(i+1)**m)/((i+1)**m-1)
print(f'your={k*r*m-r}; correct={r*i / (1-(1+i)**(-m))}')

your=54990.64676011889; correct=87915.88723000987

→ Ссылка