Простая, но нерешенная задача с 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 шт):
Плавающая точка здесь вообще не нужна. Работать в копейках.
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;
}
А где инклюды?
В этой задаче подвох в том, что отбрасывается дробная часть копеек, а не рублей. То есть, при x = 100 и p = 10, ежегодно вклад вот так будет увеличиваться:
- 110.00
- 121.00
- 133.10
- 146.41
- 161.05
- 177.15
- 194.86
- 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;
}