Найти наибольшую цифру числа
Как найти наибольшую цифру натурального числа: пошаговый алгоритм и примеры кода на Python, C, Java, JavaScript. Разбор частых ошибок и альтернатив.
Основная идея
Задача: дано натуральное число (целое положительное). Необходимо найти его наибольшую цифру. Например, для числа 764 580 наибольшая цифра — 8, для 123 456 — 6, для 999 — 9.
Алгоритм универсален и не зависит от языка программирования. Он сводится к последовательному извлечению цифр числа и сравнению их с текущим максимумом.
Алгоритм пошагово
- Присвоить переменной
m(максимум) значение последней цифры числа:m = number % 10. - Удалить последнюю цифру из числа:
number = number // 10(целочисленное деление). - Пока
number > 0:- Извлечь текущую последнюю цифру:
digit = number % 10. - Если
digit > m, тоm = digit. - Удалить последнюю цифру:
number = number // 10.
- Извлечь текущую последнюю цифру:
- Вывести
m.
Этот метод работает для любого натурального числа, включая однозначные (тогда цикл не выполнится, и ответом будет сама цифра).
Реализация на популярных языках
Python
Самый короткий способ — через строки:
def max_digit(num):
return int(max(str(num)))
Классический арифметический способ:
def max_digit(num):
m = num % 10
num //= 10
while num > 0:
digit = num % 10
if digit > m:
m = digit
num //= 10
return m
C
#include <stdio.h>
int main() {
int num, m;
scanf("%d", &num);
m = num % 10;
num /= 10;
while (num > 0) {
if (num % 10 > m)
m = num % 10;
num /= 10;
}
printf("%d\n", m);
return 0;
}
Java
import java.util.Scanner;
public class MaxDigit {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int m = num % 10;
num /= 10;
while (num > 0) {
int digit = num % 10;
if (digit > m)
m = digit;
num /= 10;
}
System.out.println(m);
}
}
JavaScript
function maxDigit(num) {
let m = num % 10;
num = Math.floor(num / 10);
while (num > 0) {
let digit = num % 10;
if (digit > m) m = digit;
num = Math.floor(num / 10);
}
return m;
}
C++
#include <iostream>
using namespace std;
int main() {
int num, m;
cin >> num;
m = num % 10;
num /= 10;
while (num > 0) {
int digit = num % 10;
if (digit > m) m = digit;
num /= 10;
}
cout << m << endl;
return 0;
}
Pascal
var
num: longint;
m: byte;
begin
readln(num);
m := num mod 10;
num := num div 10;
while num > 0 do
begin
if num mod 10 > m then
m := num mod 10;
num := num div 10;
end;
writeln(m);
end.
Альтернативные методы
Через строку (без цикла в явном виде)
Во многих языках можно преобразовать число в строку и применить функцию поиска максимума. Например, в Python:
def max_digit(num):
return int(max(str(num)))
В Java:
public static int maxDigit(int num) {
return Integer.toString(num).chars().max().orElse(0) - '0';
}
Рекурсивный подход
def max_digit_rec(num, m=0):
if num == 0:
return m
digit = num % 10
if digit > m:
m = digit
return max_digit_rec(num // 10, m)
С использованием сортировки цифр
def max_digit(num):
return int(sorted(str(num))[-1])
Но такой подход менее эффективен, так как сортировка требует больше ресурсов, чем простой перебор.
Особые случаи
- Отрицательное число: перед обработкой возьмите модуль (
abs(num)), так как цифры числа не зависят от знака. - Число с плавающей точкой: если нужно найти наибольшую цифру целой части, отбросьте дробную часть (например,
int(num)). Если дробная часть тоже учитывается, преобразуйте число в строку и обрабатывайте все символы, кроме точки. - Однозначное число: алгоритм сразу вернёт эту цифру, так как цикл не выполнится.
Примеры работы алгоритма
| Число | Наибольшая цифра |
|---|---|
| 748927183 | 9 |
| 764580 | 8 |
| 123456 | 6 |
| 999 | 9 |
| 0 | 0 |
| 1000 | 1 |
Частые ошибки
- Забыть обработать последнюю цифру – если не присвоить
mначальное значение перед циклом, может возникнуть ошибка или неверный результат. - Использовать вещественное деление – в языках со строгой типизацией (C, Java) деление
num / 10должно быть целочисленным, иначе потеряется точность. - Не учитывать отрицательные числа – при вводе отрицательного числа цикл while (num > 0) не выполнится, и программа вернёт неверный результат.
- Путать остаток от деления и деление нацело –
%даёт остаток (последнюю цифру),/(или//в Python) – целую часть.
Вывод
Поиск наибольшей цифры числа – классическая задача для освоения базовых конструкций программирования: циклов, операций деления и остатка. Алгоритм прост, легко реализуется на любом языке и служит хорошей тренировкой для начинающих. Для реальных проектов можно использовать встроенные строковые функции, но понимание арифметического метода полезно для развития алгоритмического мышления.