Простая, но нерешенная задача с ACMP. C++

Условие задачи:

Вклад в банке составляет X рублей. Ежегодно он увеличивается на P процентов, после чего дробная часть копеек отбрасывается.

Требуется определить: через сколько лет вклад составит не менее Y рублей.

Входные данные Входной файл INPUT.TXT содержит три натуральных числа: X, P и Y (X,Y ≤ 1000, P ≤ 100).

Выходные данные В выходной файл OUTPUT.TXT выведите целое число – ответ на задачу.

Код решения:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int x, p, y, cnt = 0;
    cin >> x >> p >> y;
    while (x < y)
    {
        x *= 1 + p / 100.0;
        cnt++;
    }
    cout << cnt;
}

Решение не зачлось. Проблема с плавающей точкой? в строке x *= 1 + p / 100.0 ошибок с кастами точно нет (на 99%) проверил. В чем может быть проблема?


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

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

Плавающая точка здесь вообще не нужна. Работать в копейках.

int x, p, y, cnt = 0;
cin >> x >> p >> y;

x = x * 100;
y = y * 100;
p = p + 100;
while (x < y)
{
    x = (x * p) / 100;
    cnt++;
}
→ Ссылка
Автор решения: Лук Лукин
#include <iostream>
using namespace std;
int main() {
int x, p, y, cnt = 0;
cin >> x >> p >> y;

x = x * 100;
y = y * 100;
p = p + 100;
while (x < y)
{
    x = (x * p) / 100;
    cnt++;
}
cout << cnt;
    return 0;
}

А где инклюды?

→ Ссылка
Автор решения: ARMAN 阿尔曼

В этой задаче подвох в том, что отбрасывается дробная часть копеек, а не рублей. То есть, при x = 100 и p = 10, ежегодно вклад вот так будет увеличиваться:

  1. 110.00
  2. 121.00
  3. 133.10
  4. 146.41
  5. 161.05
  6. 177.15
  7. 194.86
  8. 214.34
#include <bits/stdc++.h>
using namespace std;

int main() {
    int x, p, y;
    cin >> x >> p >> y;
    
    // работаем с копейками, а не рублями
    x *= 100;
    y *= 100;

    int years = 0;
    while (x < y) {
        x += x * p / 100;
        years++;
    }

    cout << years << endl;
}
→ Ссылка