Банковские проценты
Вы решили задачу. Теперь можно сравнить подходы.
Храним вклад в копейках и моделируем ежегодное начисление.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Целые копейки
После каждого года отбрасываем только дробь копейки. При x >= y ответ равен нулю.
x = int(input())
p = int(input())
y = int(input())
money = x * 100
years = 0
while money < y * 100:
money = money * (100 + p) // 100
years += 1
print(years)
Время: O(t), t — число лет. Память: O(1) целочисленных переменных.
Другой способ: Раздельный учёт рублей и копеек
Вычисляем целую прибавку в копейках, затем переносим каждые 100 копеек в рубли.
rubles = int(input())
p = int(input())
target = int(input())
kopecks = 0
years = 0
while rubles < target:
interest = (rubles * 100 + kopecks) * p // 100
rubles += interest // 100
kopecks += interest % 100
rubles += kopecks // 100
kopecks %= 100
years += 1
print(years)
Время: O(t). Память: O(1) целочисленных переменных.
На что обратить внимание
- Округлять до целых рублей нельзя.
- Вещественные вычисления могут ошибиться на границе копейки.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.