Опубликован: 09.12.2017 | Доступ: свободный | Студентов: 737 / 31 | Длительность: 02:06:00
Специальности: Программист
Лекция 7:

Делители числа

< Лекция 1 || Лекция 7: 123

Задачи 2 – 3. Расщепление числа. Обращение числа

Эти задачи принципиально не отличаются от задачи 1. Никаких новых алгоритмических решений здесь нет. Задача расщепления предполагает создание массива цифр. Такая задача возникает, например, при реализации алгоритма игры "Быки и коровы". Но разделять число на цифры необходимо было и при переводе чисел из одной системы счисления в другую.

Построим функцию Split, которая создает массив цифр для заданного целого числа N. Вот ее возможный код:

        /// <summary>
        /// Расщепление целого числа
        /// и создание массива цифр
        /// </summary>
        /// <param name="N">целое число</param>
        /// <returns>массив цифр числа N</returns>
        public static int[] Split(int N)
        {
            int k = N.ToString().Length;    //число цифр
            int[] res = new int[k];         //результат
            int digit;                      //текущая цифра
            for(int i = k-1; i >= 0; i--)
            {
                digit = N % 10;     //младшая цифра
                res[i] = digit;     //в конец массива
                N = N / 10;         //отрезаем цифру
            }
            return res;
        }

Алгоритм почти совпадает с переводом десятичного числа в систему с основанием p. Следует обратить внимание на два момента. Первый предварительно нужно создать массив, в котором будут храниться цифры числа N, а число цифр нужно как-то определить. Здесь применяется прием перевода числа в строку, для которого есть функция length, возвращающая длину строки.

Второй момент, который неоднозначно решается, куда помещать старшую цифру, - в начало или в конец массива. У нас старшая цифра помещается в первый элемент массива с индексом ноль.

Упражнение. Напишите функцию intlength, возвращающую число цифр целого числа.

Следующая функция строит обращение числа, - число, цифры которого идут в обратном порядке по отношению к исходному числу. Решение этой задачи немногим отличается от решения предыдущих задач:

        /// <summary>
        /// Реверс числа: 123 => 321
        /// </summary>
        /// <param name="N">исходное число</param>
        /// <returns>обращенное число</returns>
        public static int Reverse(int N)
        {
            int res = 0;        //результат
            int digit;          //текущая цифра
            while(N != 0)       //пока есть цифры
            {
                digit = N % 10;         //младшая цифра
                res = res * 10 + digit; //становится старшей
                N = N / 10;             //отрезаем цифру
            }
            return res;             //возвращаем результат
        }

Палиндромом называется число, которое одинаково читается слева направо и справа налево. Имея функцию Reverse, решение этой задачи дается в одну строчку:

        /// <summary>
        /// Является ли число палиндромом
        /// </summary>
        /// <param name="N">исходное число</param>
        /// <returns>true, если палиндром</returns>
        public static bool IsPalindrom (int N)
        {
            return Reverse(N) == N;
        }
< Лекция 1 || Лекция 7: 123