Нужно циклом вычислить количество лет по достижении лимита

Предлагаю на будущее создать функцию getYears для банкира. Функция должна возвращать количество лет, для которого сумма средств, которые надо будет отдать банку для размера кредита amount под percent процентов годовых, не превысит ожидаемый лимит expectedLimit клиента.

Примеры:

  • getYears(1600, 10, 2000) === 2 1600 + 160 + 176 < 2000;
  • getYears(500, 3, 550) === 3
function getYears(amount, percent, expectedLimit) {
  // write code here
  let i = -1;
  let a = amount;

  while  (a <= expectedLimit){
    a +=amount * percent * 0.01;
    i++;
    
  }
  return i;
}

Всё до чего я смог додуматься.

Работает во всех проверяемых кейсах, кроме этого "input: amount - 5000, percent - 5, expectedLimit - 6500 expected output: 5" выводит 6 вместо 5.


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

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

function getYears(amount, percent, expectedLimit) {
  let i = -1;
  let a = amount;

  while (a <= expectedLimit) {
    a += a * percent * 0.01; // "a * ...", a нe "amount * ..."
    i++;
  }

  return i;
}

console.log(getYears(1600, 10, 2000)) // 2 
console.log(getYears(500, 3, 550))    // 3
console.log(getYears(5000, 5, 6500))  // 5

→ Ссылка
Автор решения: Helena Evangeline Falko
    /* Мы имеем сумму - amount, 
фиксированный процент - percent, 
и ограничение - limit, сумму кот. не должны превысить. 

 - По условию мы должны написать функцию, которая посчитает максимальный срок, при котором финальная выплата не превысит лимит*/

function getYears(amount, percent, limit) {

// создадим переменную total - это то, что мы в конце выплатим

  let total = amount; 

/* вначале наша сумма совпадает с взятым кредитом
 и каждый год total будет увеличиваться*/

  let years = 0;

  // создадим цикл while, в котором мы будем сравнивать total с лимитом
  /* "до тех пор пока" total не превышает лимит мы будем добавлять еще один год */

  while (total <= limit) {  
  
// если сумма не превышает лимитов, то мы будем брать ее еще на один год

 years++;

 total += (total * percent) / 100; // увеличивается общая сумма

    /* total - увеличивается += на total умноженный на величину в процентах
  и поделенный на 100 */

  }
  
  /* в какой-то момент последний год будет лишним, поэтому результатом нашей функции будет years - 1 */

  return years - 1;
}

************************************

function getYears(amount, percent, limit) {
  let total = amount;

  let years = 0;

  while (total <= limit) {
    years++;
    total += (total * percent) / 100;
  }

  return years - 1;
}

console.log(getYears(500, 3, 550)); //3
console.log(getYears(1600, 10, 2000)); //2
console.log(getYears(5000, 5, 6500)); //5
→ Ссылка