К содержанию

Подтема 4 из 7

Цифры и знак числа

Как проверить окончание, количество цифр и знак отрицательного числа — «оканчивается на 25» в задаче темы.

Окончание числа

В задаче темы порог — максимальный элемент, оканчивающийся на 25. Среди восьми чисел темы так оканчиваются 125, −325 и 2025. Как проверить окончание программой?

Две последние цифры числа — остаток от деления его модуля на 100: abs(x) % 100 == 25. У положительного числа модуль не нужен: 2025 = 20 · 100 + 25, и при делении на 100 в остатке остаются две последние цифры. Но у −325 остаток без модуля другой:

print(2025 % 100, -325 % 100, abs(-325) % 100)
25 75 25

Почему −325 % 100 = 75? Python отсчитывает остаток от ближайшего кратного 100 слева, а для −325 это −400:

Остаток — это расстояние от −400 до −325. Две последние цифры записи, 25, даёт только модуль: 325 % 100.

Поэтому окончание всегда проверяют у . Другие окончания проверяют так же — меняется только делитель:

оканчивается на 3
abs(x) % 10 == 3
оканчивается на 25
abs(x) % 100 == 25
оканчивается на 123
abs(x) % 1000 == 123
последние цифры двух чисел совпадают
abs(x) % 10 == abs(y) % 10
Тонкости:окончание 07

Проверка abs(x) % 100 == 7 выполнена и для числа 7. Если нужна запись, которая кончается двумя символами 07, у числа должно быть хотя бы две цифры: abs(x) >= 10 and abs(x) % 100 == 7.

Где модуль не нужен

Значит, модуль нужен везде?

Нет: модуль нужен для цифр записи. Условие про остаток от деления проверяют у самого числа. «Остаток от деления числа на 5 равен 2» — это x % 5 == 2. Для −8 условие выполнено: −8 = (−2) · 5 + 2. А с модулем получится другой остаток:

print(-8 % 5, abs(-8) % 5)
2 3

Проверка делимости тоже обходится без модуля: -1250 % 25 равно 0, и −1250 кратно 25.

Количество цифр

Как проверить, что число трёхзначное, пятизначное или двузначное?

Количество цифр проверяют границами модуля — так же, как четырёхзначные числа в задаче темы. Трёхзначное число по модулю лежит от 100 до 999, и −325 тоже трёхзначное:

двузначное
10 <= abs(x) <= 99
трёхзначное
100 <= abs(x) <= 999
пятизначное
10000 <= abs(x) <= 99999
положительное трёхзначное
100 <= x <= 999
отрицательное трёхзначное
-999 <= x <= -100

Цифры можно посчитать и через текст: превращает число в строку, а len считает её символы. Но у отрицательного числа в строке есть минус:

print(len(str(-325)), len(str(abs(-325))))
4 3

Границы короче и не ошибаются на минусе, поэтому в решениях берут их.

Цифра в разряде

А если нужна не последняя цифра, а предпоследняя или первая?

Сначала отбрасывают младшие цифры делением //, потом берут последнюю цифру того, что осталось. Для −325: модуль 325, 325 // 10 = 32, и последняя цифра 32 — 2. Это предпоследняя цифра −325. Первую цифру удобно взять из записи: str(m)[0] — первый символ строки.

m = abs(-325)print(m % 10, m // 10 % 10, str(m)[0])
5 2 3

Условие «две последние цифры одинаковы» требует, чтобы цифр было хотя бы две: m >= 10 and m % 10 == m // 10 % 10. Без первой проверки подошло бы и число 5.

Знак числа

Как проверить «ровно одно число пары отрицательное»?

Ноль не положительный и не отрицательный, поэтому знак проверяют сравнением с нулём: x > 0, x < 0. «Ровно одно отрицательное» — количество из подтемы 3: int(x < 0) + int(y < 0) == 1. Пара (−8, 0) подходит: отрицательное в ней одно. А проверка x * y < 0 на ней не выполнена — произведение равно нулю:

x = -8y = 0print(int(x < 0) + int(y < 0) == 1, x * y < 0)
True False

x * y < 0 проверяет другое: одно число строго положительное, а другое строго отрицательное.

По знаку произведения трёх чисел нельзя судить и о том, одного ли они знака: у −2, −3, 5 произведение положительное. «Все одного знака» проверяют так: все три положительные или все три отрицательные — min(x, y, z) > 0 or max(x, y, z) < 0.

Итого

  • Окончаниеabs(x) % 100 == 25; -325 % 100 равно 75
  • Остатокбез модуля: «остаток от деления на 5 равен 2» — x % 5 == 2
  • Количество цифр100 <= abs(x) <= 999
  • Цифра в разрядепредпоследняя — m // 10 % 10, первая — str(m)[0]
  • Знакноль ни положительный, ни отрицательный; x * y < 0 — разные знаки

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1
Какие из чисел 25, −125, 250, −1025, 3525 оканчиваются на 25? Что даст для них проверка x % 100 == 25 без модуля?
ОтветСкрыть ответ
Ответ
На 25 оканчиваются 25, −125, −1025 и 3525. Без модуля подойдут только 25 и 3525: -125 % 100 = 75, -1025 % 100 = 75.
Вопрос 2
Для x = -9 верно ли условие «остаток от деления на 4 равен 3»? Что изменится, если ошибочно взять модуль?
ОтветСкрыть ответ
Ответ
Верно: −9 = (−3) · 4 + 3, -9 % 4 равно 3. С модулем получится abs(-9) % 4 = 1, и условие станет ложным.
Вопрос 3
Какие из чисел 99, −100, 999, −1000, 450, −45 трёхзначные?
ОтветСкрыть ответ
Ответ
−100, 999 и 450.
Вопрос 4
Найди последнюю, предпоследнюю и первую цифры записи −2048. У каких из чисел −455, 1050, 33, 5 две последние цифры одинаковы?
ОтветСкрыть ответ
Ответ
Последняя 8, предпоследняя 4, первая 2. Две последние цифры одинаковы у −455 и 33; у 5 всего одна цифра.
Вопрос 5
Пара (−5, 0): в ней ровно одно отрицательное число? Выполнено ли для неё x * y < 0?
ОтветСкрыть ответ
Ответ
Ровно одно отрицательное — да; x * y < 0 — нет: произведение равно 0.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Остаток отрицательного числа

Что выведет print(-23 % 10, abs(-23) % 10, -23 // 10)?

Введите через пробел три числа в том порядке, в каком их выведет программа.

Ровно одно оканчивается на 7

Последовательность 7, 12, 17, −7, 4. Найди количество соседних пар, где ровно одно число оканчивается на 7, и минимальную сумму квадратов таких пар.

Введите через пробел количество пар, затем минимальную сумму квадратов.

Трёхзначные на 7 по модулю

Для файла 17-1.txt определите количество чисел, модуль которых — трёхзначное число, оканчивающееся на 7, затем — сколько из них отрицательных. В ответе запишите два числа.

17-1.txtПоследовательность целых чисел от −10 000 до 10 000Текстовый файл · 4,3 КБ

Введите через пробел количество таких чисел, затем количество отрицательных среди них.

Две одинаковые последние цифры

Для файла 17-1.txt определите количество чисел, в записи которых хотя бы две цифры и две последние цифры одинаковы.

17-1.txtПоследовательность целых чисел от −10 000 до 10 000Текстовый файл · 4,3 КБ

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

Ровно одно отрицательное

Последовательность −8, 0, 5, −3, 2. Найди количество соседних пар, где ровно одно число отрицательное, и максимальную сумму таких пар.

Введите через пробел количество пар, затем максимальную сумму.