[МУЗЫКА] Посмотрим
примеры решений еще парочки задач.
Например, задача такая: у нас есть число,
и требуется удалить некоторое заданное количество цифр в конце этого числа.
То есть, например, если у нас есть число 123 и нужно удалить одну цифру,
должно остаться число 12.
Что нам потребуется?
Нам потребуется само число и количество цифр, которые нужно удалить.
Назовем их n и k.
n — это само число, k — сколько цифр с его конца нужно отрезать.
[БЕЗ_ЗВУКА] Данные мы считали, а что делать, непонятно.
Давайте для начала научимся удалять одну цифру из числа, самую последнюю.
Пока что уберем вот это, написанное «Считывание k».
Чтобы не удалять, можно закомментировать.
Комментарий — это что-то, любой текст, поясняющий программу.
Ну или мы воспользовались им для того, чтобы пока что строка не выполнялась.
Строки с комментариями, естественно, не выполняются.
Ставится «решеточка» в начале строки — и всё!
Это превращается вся строка в комментарий.
Итак, мы решаем более простую задачу: вывести число без последней цифры.
Как это можно сделать?
Всего лишь разделить на 10.
Если мы разделим нацело на 10, то у нас последняя цифра пропадет.
Посмотрим, правда ли это.
Лучше проверить на всякий случай.
Так, вот наше число 123.
Мы ожидаем увидеть 12.
И видим 12 — отлично!
Последнюю цифру мы научились отрезать.
Теперь нужно научиться отрезать k цифр.
Для этого достаточно возвести 10 в степень k.
У нас получится единичка, и после этого k ноликов.
И как раз, когда мы разделим, у нас пропадут эти последние k цифр.
Так, сейчас я возвращаю эту строку.
Она оказалась не на том месте, я ее вырезаю, вставляю.
Всё, у нас перестало подчеркивать что-то.
До этого она подчеркивала k буковку,
потому что переменная k была не определена на тот момент.
Кстати, давайте посмотрим, а что будет, если у нас произошла такая ситуация?
Вот я, допустим, перепутал названия переменных.
Запускаю программу.
Во-первых, у меня подчеркивает оно
по-прежнему те строки, которые корректно ждет,
что пользователь что-то введет, и ломается только на той строке,
где мы обращаемся к переменной, у которой нет никакого значения.
Она не существует!
Вот так это выглядит.
Поэтому если вы увидите что-то похожее, то вы знаете,
как избавиться от этой проблемы — назвать переменные одинаково.
Итак, теперь мы сделали всё хорошо.
И попробуем от числа такого, например, 123456, отрезать три последние цифры.
123.
Успешно отрезается.
А что будет, если нас попросят отрезать 0 цифр?
Будет ли наша программа работать?
Да, она работает.
Почему?
Потому что 10, вообще любое число в нулевой степени — это единица.
Ну и когда мы делим нацело на единицу, мы, естественно,
получаем абсолютно то же самое число.
Хорошо, таким образом,
мы научились отрезать какое-то количество последних цифр, и это вам пригодится.
Посмотрим последнюю на сегодня задачу,
которая формулируется так: заданы числа a и b.
Требуется получить округленный вверх результат от деления a на b.
Считываем a и b,
после этого думаем, что же нам делать.
У нас есть операция для деления, обычная арифметическая операция.
Может быть, она делает то, что нам нужно?
Допустим, мы забыли, что она делает, и надеемся на это.
Итак, допустим, мы хотим наше любимое число 11 разделить на 6.
У нас в результате деления получается единица, целая часть от деления.
Оно округляет вниз.
При округлении вверх у нас должна получиться двойка.
Но при этом в некоторых случаях даже наш такой неправильный алгоритм
работает правильно.
Почему?
Ну вот такой пример: мы 12 теперь делим на 6, результат деления получается целым,
и он же является округленным и вниз, и вверх одновременно.
Ну потому что это целое число.
То есть вот в этой ситуации работает правильно,
а во всех остальных работает неправильно.
Мы можем попытаться просто прибавлять единицу к результату вычисления.
Казалось бы, оно округляет вниз, а после прибавления единицы оно округляет вверх.
Но вот эта ситуация, когда у нас результат является уже целым числом,
даст нам неправильный ответ в этой ситуации.
Посмотрим: 12 делим на 6.
И получаем 3 — неправильный ответ.
Как же избавиться от этого?
Есть несколько способов сделать это, не выходя за пределы целых чисел.
Ну, например, мы можем прибавить к нашему числу a что-то такое,
чтобы оно стало больше,
и при округлении вниз,
при делении у нас получался результат как бы округления исходного числа a вверх.
Если мы прибавим b, то мы столкнемся с той же самой проблемой.
У нас будет при ситуации, когда одно число делится на другое,
получаться ответ на единицу больше.
Поэтому нужно прибавить что-то чуть меньше, чем наше число b.
Например, b − 1.
Тогда у нас, наверное, всё будет работать.
Давайте сначала проверим.
Потом, если работает, объясним это.
А если не работает — ну тоже объясним!
11 делить на 6.
Получается двойка, всё правильно.
А теперь сложный случай: 12 делить на 6.
Опять двойка, и опять всё правильно.
То есть округление вверх работает, давайте подумаем, почему.
У нас a + b − 1.
Вот такое выражение мы пытаемся разделить на b.
Если у нас при округлении вниз получалось не то,
что нужно, то что будет получаться, если мы прибавим вот это самое b − 1?
Наше число a + b − 1 теперь станет больше,
чем ближайшее к нему большее, делящееся на b.
Ну или равно ему, в случае, если, например,
остаток деления от a делить на b был равен единице.
А вот в ситуации,
когда у нас a делилось на b уже нацело, у нас получится число меньше,
чем a + b, и при округлении вниз оно даст нам как раз результат деления a на b.
Вот поэтому оно и работает.
В принципе, можно придумать и другие способы.
Например, мы можем вместо того, чтобы (a + b −
1) // b, просто разделить (a − 1) // b — число чуть меньше,
чем a, и прибавить единичку к этому.
Тогда у нас во всех ситуациях, когда округление вниз
давало число на единицу меньше, чем нужный нам результат, прибавится единичка,
и то же самое сработает в ситуации, когда a делилось на b.
Если a делилось на b, то (a − 1) / b, будет давать результат на единицу меньше.
Проверим.
Значит, я разделил 12 на 5 и получил 3 — это действительно результат
округления вверх.
И 12 я делю на 6 и,
опять же, получаю правильный результат.
В принципе, на самом деле,
это просто вынос за пределы скобок того же самого числа b.
По сути это то же самое.
Теперь вам предстоит решить еще несколько задач.
Они достаточно головоломные.
Если вы не смогли их решить, то отнеситесь к этому, как к математической головоломке.
Если вы их не любите — ничего страшного, если вы их пропустите.
Ну хотя бы половину всех задач решить нужно.
А в следующем видео мы подробнее поговорим о том, как всё устроено внутри, то есть
как эти переменные на самом деле хранятся, и что происходит при присваивании.
[МУЗЫКА]
[МУЗЫКА]