nicknamecsharp
@nicknamecsharp

Почему один код выполняется быстрее другого C++?

Учу с++, решал несложную задачу.
Не понимаю, почему первый вариант решения проходит по времени, а второй нет.

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

1-ый вариант решения
int main() {
	int x, p, y, count = 0;
	std::cin >> x >> p >> y;
	x *= 100; 
	y *= 100;
	while (x < y) {
		x += x * p / 100;
		count++;
	}
	std::cout << count;
	return 0;
}

2-ой вариант решения
int main() {
	int x, p, y, count = 0;
	std::cin >> x >> p >> y;
	while (x < y) {
		x += x * p / 100;
		count++;
	}
	std::cout << count;
	return 0;
}
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Потому что тут разное поведение.

Первый вариант отбрасывает дробные части от копеек, а второй отбрасывает дробные части от рублей. Ведь при делении на 100 в целых числах идет округление вниз. Если брать p процентов с округлением вниз от числа в рублях, то и получится целое число в рублях. Если брать от числа в копейках, то и получится целое число в копейках.

Поскольку второй код отбрасывает все копейки при прибавлении, то ему требуется больше итераций, чтобы дойти до y. На самом деле он может даже виснуть, если там получается прибавление 0.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы