Задача
Назовем число более круглым, чем другие числа, если оно имеет больше заключительных нулей. Если два числа имеют одинаковое количество заключительных нулей, то более круглым считается меньшее число.
Входные данные
В первой строке входных данных задано количество чисел [latex]N (1 \leqslant N \leqslant 100)[/latex]. Каждая из последующих [latex]N[/latex] строк содержит одно число в пределах от [latex]1[/latex] до [latex]10^9[/latex].
Выходные данные
Вывести наиболее круглое число среди заданных [latex]N[/latex] чисел.
Тесты
№ | Ввод | Вывод |
1 | 3 600000 1000 20000 |
600000 |
2 | 4 71200 10 200 10001 |
200 |
3 | 6 19 3 4580004 26 8302 5 |
3 |
4 | 4 32900 23090 20309 23900 |
23900 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> using namespace std; int main() { unsigned int n, a, acopy, max_number = 0, value = 1000000000, local_number; cin >> n; while (n--) { cin >> a; acopy = a; for (local_number = 0; acopy % 10 == 0; local_number++) acopy /= 10; if ( local_number > max_number) { max_number = local_number; value = a; } else if (local_number == max_number && a < value) value = a; } cout << value; return 0; } |
Решение задачи
Основная цель задачи — среди
a чисел выбрать то, которое будет иметь наибольшее число нолей в конце и при этом быть наименьшим среди чисел с таким же количеством ноле в конце. Заводим переменные
max_number, value, local_number. Первая будет обозначать максимальное число нолей в конце. Вторая будет значением числа с максимальным количеством нолей. Третья же, как следует из её названия, означает локальное количество нолей, то есть того числа, с которым непосредственно идёт работа. Сперва считаем количество нолей в конце числа или, вернее, его копии, которую мы будем делить на десять, пока «крайняя» справа цифра равна 0. Число нолей будет равно числу проделанных делений. После имеет смысл рассматривать два случая: когда количество нолей введенного последним числа больше максимального и когда значения равны. В первом изменяются и максимум
max_number, и само число
value, получая значения соответственно количества нолей последнего введенного числа и его самого, если локальное число нолей больше максимального. Во втором же только
value, если число из потока оказывается меньше и имеет то же кол-во нолей; в этом случае изменять
max_number просто не имеет смысла.
В итоге выводим наиболее круглое число —
value.