Образование·Информатика

Найти наибольшую цифру числа

Как найти наибольшую цифру натурального числа: пошаговый алгоритм и примеры кода на Python, C, Java, JavaScript. Разбор частых ошибок и альтернатив.

Найти наибольшую цифру числа

Введите число

Основная идея

Задача: дано натуральное число (целое положительное). Необходимо найти его наибольшую цифру. Например, для числа 764 580 наибольшая цифра — 8, для 123 456 — 6, для 999 — 9.

Алгоритм универсален и не зависит от языка программирования. Он сводится к последовательному извлечению цифр числа и сравнению их с текущим максимумом.

Алгоритм пошагово

  1. Присвоить переменной m (максимум) значение последней цифры числа: m = number % 10.
  2. Удалить последнюю цифру из числа: number = number // 10 (целочисленное деление).
  3. Пока number > 0:
    • Извлечь текущую последнюю цифру: digit = number % 10.
    • Если digit > m, то m = digit.
    • Удалить последнюю цифру: number = number // 10.
  4. Вывести 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

Частые ошибки

  1. Забыть обработать последнюю цифру – если не присвоить m начальное значение перед циклом, может возникнуть ошибка или неверный результат.
  2. Использовать вещественное деление – в языках со строгой типизацией (C, Java) деление num / 10 должно быть целочисленным, иначе потеряется точность.
  3. Не учитывать отрицательные числа – при вводе отрицательного числа цикл while (num > 0) не выполнится, и программа вернёт неверный результат.
  4. Путать остаток от деления и деление нацело% даёт остаток (последнюю цифру), / (или // в Python) – целую часть.

Вывод

Поиск наибольшей цифры числа – классическая задача для освоения базовых конструкций программирования: циклов, операций деления и остатка. Алгоритм прост, легко реализуется на любом языке и служит хорошей тренировкой для начинающих. Для реальных проектов можно использовать встроенные строковые функции, но понимание арифметического метода полезно для развития алгоритмического мышления.

Часто задаваемые вопросы

Как найти наибольшую цифру числа в Python?
Самый короткий способ – преобразовать число в строку и применить встроенную функцию max(): int(max(str(num))). Классический алгоритм без строк использует цикл while: извлекать последнюю цифру (num % 10), сравнивать с текущим максимумом и отбрасывать её (num //= 10).
Как работает алгоритм с делением на 10?
Операция num % 10 возвращает последнюю цифру числа. Затем число делится нацело на 10 (num // 10), что отбрасывает эту цифру. Цикл повторяется, пока число не станет равным нулю. На каждом шаге сравниваем извлечённую цифру с текущим максимумом и при необходимости обновляем его.
Можно ли найти наибольшую цифру без циклов?
Да, если преобразовать число в строку и использовать встроенные функции, например max() в Python или Stream API в Java. Однако внутри них всё равно выполняется перебор элементов. Для чисел с плавающей точкой или отрицательных чисел потребуется предварительная обработка (взятие модуля, отбрасывание дробной части).
Как найти наибольшую цифру числа в C++?
Классический способ: int maxDigit = 0; while (num > 0) { int digit = num % 10; if (digit > maxDigit) maxDigit = digit; num /= 10; } Если число может быть отрицательным, сначала возьмите его модуль (abs(num)). Для целых чисел метод работает без преобразования в строку.
Что делать, если число отрицательное или содержит цифры после запятой?
Для отрицательных чисел следует взять модуль (abs(num)) перед обработкой. Для вещественных чисел можно сначала отбросить дробную часть (например, через int(num) в Python) или рассматривать только целую часть. Если нужно учитывать дробные цифры, придётся преобразовать число в строку и обрабатывать символы после точки.
Какой способ быстрее: через строку или через деление?
Для небольших чисел разница незаметна. Арифметический способ (деление на 10) обычно работает быстрее, так как не требует преобразования типов и выделения памяти под строку. Однако на практике для учебных задач оба варианта приемлемы. Выбор зависит от требований к производительности и читаемости кода.