Калькулятор определяет наибольшую цифру целого числа, не превращая его в строку. Он по очереди отделяет младшие разряды и сравнивает их с текущим максимумом, пока число не обнулится.
Задача кажется простой, пока число короткое: у 764 580 наибольшая цифра — 8, у 123 456 — 6. Но для произвольного числа нужен цикл. Каждую итерацию последняя цифра извлекается как остаток от деления на 10, сравнивается с текущим максимумом и отбрасывается целочисленным делением на 10.
Максимум удобно начинать с нуля: любая цифра числа не меньше нуля, поэтому первое же сравнение задаст корректное начальное значение. Цикл прекращается, когда число обращается в ноль.
Здесь N — текущее значение числа, d — извлечённая цифра, m — наибольшая найденная цифра. Такой подход работает и для однозначных чисел: цикл выполнится один раз и сразу вернёт саму цифру.
Пример 1. Число 764580. Цифры по разрядам: 0, 8, 5, 4, 6, 7. Максимум по ходу перебора: 0, 8, 8, 8, 8, 8. Ответ — 8.
Пример 2. Число 123456. Максимум постепенно растёт до 6, ответ — 6.
Пример 3. Число 999 состоит из одинаковых цифр, поэтому ответ — 9. Для нуля наибольшая цифра тоже 0.
Перебор разрядов для числа 764580
| Шаг | Цифра | Наибольшая |
|---|---|---|
| 1 | 0 | 0 |
| 2 | 8 | 8 |
| 3 | 5 | 8 |
| 4 | 4 | 8 |
| 5 | 6 | 8 |
| 6 | 7 | 8 |
Девятка — максимум по значению цифры, но стартовое значение максимума должно быть минимально возможным. Ноль подходит, так как все цифры неотрицательны.
Сначала берут модуль: знак минус не является цифрой и не должен влиять на результат. Калькулятор так и делает.
Число преобразуют в текст, затем находят максимальный символ и переводят его обратно в число. Способ короче, но требует работы со строками.
Пока число укладывается в точность типа данных — да. Для очень длинных чисел применяют строковый подход или длинную арифметику.