Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Олимпиадная задача сложения целых чисел произвольной длины на языке Python
Сегодня отвлечёмся от изучения множества библиотек, созданных для языка Python. Решил вспомнить старые олимпиадные задачи. Сегодня старинная (да, да) задачка: написать программу сложения двух целых чисел произвольной длины. Поскольку длина числа произвольна, придётся представлять его строкой. Длины чисел ограничены, таким образом, только возможностями хранения строковых данных. Чтобы слегка усложнить задачу, запретим также пользоваться функцией int(), которую можно было бы использовать для сложения отдельных разрядов числа. Не будем, также, использовать списки. В общем по-максимуму уменьшим возможности языка Python. Впрочем, кое-что оставим. Не хочется уж совсем раздувать размер программы. Метод isdigit() проверяет состоит ли строка из одних цифр. Оператор '0' *n позволяет создать строку из n нулей.
Поскольку функции int() у нас нет, придётся оперировать кодами разрядов. Для цифр эти коды хорошо известны: 48-57, для 0-9 соответственно. Функция sm() складывает три разряда. При этом один из разрядов равен или 0 или 1. Ну что делать, не нужно забывать как складываются целые числа столбиком: складываем два разряда плюс возможно перенесённая из предыдущего сложения 1.
Чтобы удобно было складывать, числа дополняем слева нулями, чтобы сравнять их длины. Добавляется также один лишний нуль на случай, если будет перенос из последнего разряда.
Наконец напомню, ord() возвращает код символа, а chr() преобразует код символа в символ. Всё остальное в программе это просто воспроизведение того, как мы складываем два целых числа столбиком.
Ну, пока всё. Алгоритмы других арифметических операций я приведу в других статьях раздела Алгоритмы.
Пишите свои предложения и замечания и занимайтесь программированием, хотя бы для поддержания уровня интеллекта.