Top.Mail.Ru
Ответы

Помогите решить задачу на C++

Банковские проценты
Вклад в банке составляет x
рублей. Ежегодно он увеличивается на p
процентов, после чего дробная часть от копеек отбрасывается. Определите, через сколько лет вклад составит не менее y
рублей. В задаче запрещено использовать дробные числа.

Входные данные

Программа получает на вход три натуральных числа: x
, p
, y
(x⩽2000
, p⩽100
, y⩽2000
).

Выходные данные

Программа должна вывести одно целое число — ответ задачи.

Примеры
Ввод
Вывод
100
10
200
8

Этот код работает но при отрицательных числах просто не хочет считать:

#include <iostream>

using namespace std;

int main() {
int x, p, y;
cin >> x >> p >> y;
int i = 0;
while (x < y) {
x *= (1 + p / 100.0);
x = int(100 * x) / 100;
i += 1;
}
cout << i << std::endl;
return 0;
}

По дате
По Рейтингу
Аватар пользователя
Новичок
12345678
 #include <cmath> 
#include <iostream> 
using namespace std; 
int main() { 
    int x, p, y; 
    cin >> x >> p >> y; 
    cout << int(log((double)y / x) / log(1 + p / 100.0)) + (p != 100) << '\n';
} 
Аватар пользователя
Ученик

а можно на пайтоне?

Аватар пользователя
Мыслитель

Если без дробей и могут понадобиться, например, триллионы, то так:

12345678910111213141516
 #include <iostream>  
int main()  
{ 
  unsigned long long x, p, y, years = 0; 
  std::cin >> x >> p >> y;  
  while (true) 
  { 
    if (x >= y) break; 
    else 
    { 
      x = (100 + p) * x / 100; 
      ++years; 
    } 
  }  
  std::cout << years << ' ' << x;  
} 

После количества лет накопленную сумму вклада тоже лучше выводить для контроля. А что за отрицательные числа? Ни вкладов, ни банковских процентов, выражаемых отрицательными числами, не бывает!