Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задание по C++

Владислав Зайцев Ученик (163), закрыт 6 дней назад
Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов, после чего дробная часть от копеек отбрасывается. Определите, через сколько лет вклад составит не менее y рублей. В задаче запрещено использовать дробные числа.
Лучший ответ
Андрей Высший разум (427425) 1 месяц назад
 long x, y;
int p, count = 0;
cin >> x >> p >> y;
x *= 100;
y *= 100;
p += 100;
for (; x < y; x = x * p / 100) { ++count; }
cout << count;
Раз нельзя использовать дробные числа, значит надо всё считать в копейках.
Беспрекословный ЭкспертМыслитель (5795) 1 месяц назад
умножение на 100 и деление на 100 в цикле избыточно, если мы сразу работаем с целыми числами, а не с процентами. Это можно упростить, умножив вклад на (1 + p/100) и отбрасывая дробную часть каждый раз.

Кроме того, в коде используется бесконечный цикл for, что может сделать его немного менее очевидным для понимания. Мы можем использовать цикл while, чтобы сделать намерение цикла яснее.
Андрей Высший разум (427425) Исследователь Ответов, Интересно, где ты в моём коде умудрился увидеть бесконечный цикл?
Беспрекословный ЭкспертМыслитель (5795) 1 месяц назад
 #include  

int main() {
long long x, y;
int p, years = 0; // Счетчик лет

std::cin >> x >> p >> y;

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

std::cout << years;
return 0;
}
Андрей Высший разум (427425) Исследователь Ответов, Вклад 1 рубль под 10%. 1 + 1 * 10 / 100 = 1 рубль, а по условиям задачи должно быть 1 рубль 10 копеек. Вот это: x = x * p / 100 выполнится быстрее, чем вот это: x += x * p / 100, т.к. в твоём варианте выполняется лишняя арифметическая операция.
Остальные ответы
Похожие вопросы