Найти наибольшую и наименьшую цифру числа — примеры на Python, C++, JavaScript, C и Java

Хотя для программиста не обязательно быть профессором математики, умение быстро анализировать цифры и переменные — полезный навык. Задачи на работу с цифрами часто встречаются на собеседованиях и тестах. В этой статье разберём, как найти наибольшую и наименьшую цифру числа на Python, C++, JavaScript, C и Java, а также рассмотрим альтернативные подходы и наборы тестов.
Условие задачи
Дано число num. Нужно найти и вывести наибольшую и наименьшую цифру числа num.
Примеры:
Пример 1: num = 238627
Наибольшая цифра: 8
Наименьшая цифра: 2
Пример 2: num = 34552
Наибольшая цифра: 5
Наименьшая цифра: 2
Пример 3: num = 123
Наибольшая цифра: 3
Наименьшая цифра: 1
C++ — программа для поиска наибольшей и наименьшей цифры
Ниже — исходный код на C++. Комментарии и логика сохранены.
// C++ program to find the largest and smallest
// digit of a number
#include
using namespace std;
void findLargestSmallest(int num)
{
int largestDigit = 0;
int smallestDigit = 9;
int digit;
while(num)
{
digit = num%10;
// Finding the largest digit
largestDigit = max(digit, largestDigit);
// Find the smallest digit
smallestDigit = min(digit, smallestDigit);
num = num/10;
}
cout << "Largest Digit: " << largestDigit << endl;
cout << "Smallest Digit: " << smallestDigit << endl;
}
// Driver Code
int main()
{
int num1 = 238627;
cout << "num1: " << num1 << endl;
findLargestSmallest(num1);
int num2 = 34552;
cout << "num2: " << num2 << endl;
findLargestSmallest(num2);
int num3 = 123;
cout << "num3: " << num3 << endl;
findLargestSmallest(num3);
int num4 = 45672;
cout << "num4: " << num4 << endl;
findLargestSmallest(num4);
int num5 = 76567;
cout << "num5: " << num5 << endl;
findLargestSmallest(num5);
return 0;
} Вывод (пример):
num1: 238627
Largest Digit: 8
Smallest Digit: 2
num2: 34552
Largest Digit: 5
Smallest Digit: 2
num3: 123
Largest Digit: 3
Smallest Digit: 1
num4: 45672
Largest Digit: 7
Smallest Digit: 2
num5: 76567
Largest Digit: 7
Smallest Digit: 5Python — программа для поиска наибольшей и наименьшей цифры
Классический вариант с арифметикой, без преобразования в строку.
# Python program to find the largest and smallest
# digit of a number
def findLargestSmallest(num):
largestDigit = 0
smallestDigit = 9
while (num):
digit = num % 10
# Finding the largest digit
largestDigit = max(digit, largestDigit)
# Finding the smallest digit
smallestDigit = min(digit, smallestDigit)
num = num // 10
print("Largest Digit:", largestDigit)
print("Smallest Digit:", smallestDigit)
# Driver Code
num1 = 238627
print("num1:", num1)
findLargestSmallest(num1)
num2 = 34552
print("num2:", num2)
findLargestSmallest(num2)
num3 = 123
print("num3:", num3)
findLargestSmallest(num3)
num4 = 45672
print("num4:", num4)
findLargestSmallest(num4)
num5 = 76567
print("num5:", num5)
findLargestSmallest(num5)Вывод тот же, что и в примерах выше.
JavaScript — программа для поиска наибольшей и наименьшей цифры
Различные среды (браузер или Node.js) выводят по-разному; в примере используется document.write на веб-странице.
// JavaScript program to find the largest and smallest
// digit of a number
function findLargestSmallest(num) {
var largestDigit = 0;
var smallestDigit = 9;
var digit;
while(num) {
digit = num%10;
// Finding the largest digit
largestDigit = Math.max(digit, largestDigit);
// Find the smallest digit
smallestDigit = Math.min(digit, smallestDigit);
num = parseInt(num / 10);
}
document.write("Largest Digit: " + largestDigit + " \n");
document.write("Smallest Digit: " + smallestDigit + " \n");
}
// Driver Code
var num1 = 238627;
document.write("num1: " + num1 + " \n");
findLargestSmallest(num1);
var num2 = 34552;
document.write("num2: " + num2 + " \n");
findLargestSmallest(num2);
var num3 = 123;
document.write("num3: " + num3 + " \n");
findLargestSmallest(num3);
var num4 = 45672;
document.write("num4: " + num4 + " \n");
findLargestSmallest(num4);
var num5 = 76567;
document.write("num5: " + num5 + " \n");
findLargestSmallest(num5);C — программа для поиска наибольшей и наименьшей цифры
Классический C-код с макросами Max/Min.
// C program to find the largest and smallest
// digit of a number
#include
#define Max(a,b) (a>b?a:b)
#define Min(a,b) (a>b?b:a)
void findLargestSmallest(int num)
{
int largestDigit = 0;
int smallestDigit = 9;
int digit;
while(num)
{
digit = num%10;
// Finding the largest digit
largestDigit = Max(digit, largestDigit);
// Find the smallest digit
smallestDigit = Min(digit, smallestDigit);
num = num/10;
}
printf("Largest Digit: %d \\\n", largestDigit);
printf("Smallest Digit: %d \\\n", smallestDigit);
}
// Driver Code
int main()
{
int num1 = 238627;
printf("num1: %d \\\n", num1);
findLargestSmallest(num1);
int num2 = 34552;
printf("num2: %d \\\n", num2);
findLargestSmallest(num2);
int num3 = 123;
printf("num3: %d \\\n", num3);
findLargestSmallest(num3);
int num4 = 45672;
printf("num4: %d \\\n", num4);
findLargestSmallest(num4);
int num5 = 76567;
printf("num5: %d \\\n", num5);
findLargestSmallest(num5);
return 0;
} Java — программа для поиска наибольшей и наименьшей цифры
Пример на Java с использованием Math.max / Math.min.
// Java program to find the largest and smallest
// digit of a number
public class Main
{
static void findLargestSmallest(int num)
{
int largestDigit = 0;
int smallestDigit = 9;
int digit;
while(num != 0)
{
digit = num % 10;
// Finding the largest digit
largestDigit = Math.max(digit, largestDigit);
// Finding the smallest digit
smallestDigit = Math.min(digit, smallestDigit);
num = num / 10;
}
System.out.println("Largest Digit: " + largestDigit);
System.out.println("Smallest Digit: " + smallestDigit);
}
// Driver Code
public static void main(String[] args) {
int num1 = 238627;
System.out.println("num1: " + num1);
findLargestSmallest(num1);
int num2 = 34552;
System.out.println("num2: " + num2);
findLargestSmallest(num2);
int num3 = 123;
System.out.println("num3: " + num3);
findLargestSmallest(num3);
int num4 = 45672;
System.out.println("num4: " + num4);
findLargestSmallest(num4);
int num5 = 76567;
System.out.println("num5: " + num5);
findLargestSmallest(num5);
}
}Альтернативные подходы
- Преобразование в строку: конвертируете число в строку, итерируете символы, сравниваете кодовые значения или преобразуете каждый символ в число. Это удобно для очень больших чисел или когда требуется учитывать ведущие нули (если число представлено как строка).
- Использование коллекций: поместить цифры в массив/множество и взять min/max (удобно при дополнительных требованиях: частота цифр и т. п.).
- Векторизация/параллелизм: для очень длинных чисел (например, числа в виде строки длиной миллионы) можно разбить задачу и выполнить в параллельных потоках.
Когда метод с арифметикой не сработает
- Негативные числа: нужно взять абсолютное значение перед разбором цифр.
- Неформатированный ввод (символы, десятичная точка): сначала следует валидировать и очистить ввод.
- Ведущие нули: при хранении в числовом типе они теряются; если важны, работайте со строкой.
Критерии приёмки
- Корректно обрабатываются положительные и отрицательные целые числа.
- Для однозначного числа (например, 7) и наибольшая, и наименьшая цифра должны быть равны 7.
- При вводе нечисловых символов функция должна возвращать ошибку или корректно игнорировать неподходящие символы (в зависимости от спецификации).
Проверочные тесты (минимальный набор)
- 238627 → max=8, min=2
- 34552 → max=5, min=2
- 123 → max=3, min=1
- 0 → max=0, min=0
- -909 → max=9, min=0 (предполагаем абсолютное значение)
- “00120” (строка) → max=2, min=0 (если считаем ведущие нули)
Быстрая шпаргалка (cheat sheet)
- Арифметический подход: while (n != 0) { d = n % 10; update min/max; n /= 10 }
- Строковый подход: for ch in str(n): val = int(ch); update min/max
- Учтите знак и формат входа заранее.
Модель мышления (одна строка)
Разбить число на единичные цифры и применить простую функцию сравнения (min/max) — O(d), где d — число цифр.
Простая карта решений (Mermaid)
flowchart TD
A[Начало] --> B{Ввод числа}
B --> |Не число| E[Ошибка]
B --> |Строка| C[Итерация по символам]
B --> |Число| D[Взять abs и арифметика]
C --> F[Обновить min/max]
D --> F
F --> G[Вывести результат]
E --> H[Завершить с ошибкой]Глоссарий (коротко)
- Цифра — отдельный десятичный разряд числа (0–9).
- Арифметический разбор — процесс получения цифр через % и /.
Итог
Этот приём — шаблонная задача для практики базовой арифметики и работы с типами данных. Арифметический метод прост и эффективен для типичных целых чисел; строковый метод удобен для больших чисел и случаев с ведущими нулями. Выберите подход в зависимости от требований к вводу и производительности.
Важно: всегда валидируйте ввод (отрицательные числа, нечисловые символы, формат строки) и покрывайте крайние случаи тестами.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone