В данной статье рассмотрим способы решения задачи о цифрах заданного натурального числа.
Задача. С клавиатуры вводится натуральное число N. Определить, есть ли в нем четные цифры?
Четные цифры это: 0, 2, 4, 6, 8
1 способ
f:=false;
while N<>0 do
begin
d:=N mod 10;
if d in [0,2,4,6,8] then f:=true;
N:=N div 10;
end;
if f then println('Да, четные цифры есть в числе') else println('Нет, четных цифр нет в числе');
За значение флага f приняли ЛОЖЬ - четных цифр нет в числе. Выделили цифры числа оператором цикла while. Если цифра принадлежит множеству четных цифр, то значение флага изменяем на ИСТИНУ.
За циклом осуществляется проверка флага. Если флаг принял значение ИСТИНА, то в числе есть четные цифры, в противном случае нет.
Комментарии:
- логическое значение ЛОЖЬ - false
- логическое значение ИСТИНА - true
- для хранения логических значений используются переменные типа boolean
- оператор вхождения элемента в множество - in
Программа решения задачи на языке Паскаль
var N,d:integer;
f:boolean;
begin
print('Введите натуральное число N:');
readln(N);
f:=false;
while N<>0 do
begin
d:=N mod 10;
if d in [0,2,4,6,8] then f:=true;
N:=N div 10;
end;
if f then println('Да, четные цифры есть в числе') else println('Нет, четных цифр нет в числе');
end.
Результат запуска программы
2 способ
Используем модуль School, функцию digits и методы динамических массивов.
С помощью функции digits получим список цифр числа, преобразуем список к массиву, найдем в полученном массиве четные цифры, преобразуем полученную последовательность в массив и вычислим его длину. Если длина полученного массива четных цифр не равна 0, то ответ Да, иначе Нет.
Программа решения задачи на языке Паскаль
uses school;
var N,p:integer;
begin
print('Введите натуральное число N:');
readln(N);
p:=digits(N).ToArray.Where(k -> k in [0,2,4,6,8]).ToArray.Length;
if p<>0 then println('Да, четные цифры есть в числе') else println('Нет, четных цифр нет в числе');
end.
Комментарии:
- Условие k in [0,2,4,6,8] можно изменить на обычную проверку: остаток от деления на 2 равен 0? k mod 2 = 0
- Данная программа является линейной и не использует цикл для выделения цифр числа.
3 способ
Преобразуем число в строку. Выполним проверку вхождения символов '0', '2', '4', '6', '8' в полученную строку.
Программа решения задачи на языке Python
n = int(input())
n = str(n) #функция str преобразует числовое значение в строковое
f = ('0' in n) or ('2' in n) or ('4' in n) or ('6' in n) or ('8' in n)
if f:
print('yes')
else:
print('no')