Тверской государственный университет
Опубликован: 06.10.2013 | Доступ: свободный | Студентов: 1373 / 335 | Длительность: 02:37:00
Специальности: Преподаватель
Лекция 1:

Позиционные системы счисления. Представление целых чисел

Лекция 1: 12 || Лекция 2 >

Формальный алгоритм перевода десятичного числа в систему с основанием p

Алгоритм достаточно прост. На пальцах он выглядит так. Необходимо последовательно делить число на p - основание системы счисления. Остатки от деления дают цифры для записи числа в системе с основанием p.

Приведу обоснование алгоритма:

Воспользуемся представлением (*) для записи числа N.

  1. Положим M = N = c_{k-1} * p^{k-1} + c_{k-2} * p^{k-2} + … + c_{0} * p^0;
  2. Представим число M в виде: M = (c_{k-1} * p^{k-2} + c_{k-2} * p^{k-3} + … + c_{1}) * p + c_{0}
  3. Нетрудно видеть: с_{0} = M \% p, где операция % означает остаток от деления;
  4. Вычислим новое значение M = M / p, где операция / означает деление нацело. Результатом этой операции является число, от которого отрезана последняя цифра; Полученное число сохраняет представление (*).
  5. Операции 3 и 4 будем повторять k раз, получая каждый раз очередную цифру в разложении N по степеням основания p.

Вот как выглядит точная запись этого алгоритма в виде функции на языке С#:

  /// <summary>
    /// Перевод десятичного числа N 
    /// в систему счисления с основанием p
    /// </summary>
    /// <param name="N"> переводимое число</param>
    /// <param name="p">основание системы счисления</param>
    /// <returns>
    /// строка, задающая запись числа 
    /// в системе с основанием p
    /// </returns>
    static string Perevod10ToP(int N, int p)
    {
      string result = "";
      int M = N;
      while (M != 0)
      {
        result = (M % p).ToString() + result;
        M = M / p;
      }
      return result;
    }
    

К этому алгоритму мы еще вернемся, а сейчас рассмотрим несколько менее тривиальных задач, на тему представления чисел в системах счисления.

Задача 5: Число 77 в системе счисления с основанием p заканчивается на 0, а число 29 в этой системе заканчивается на 1. Чему равно p – основание системы счисления?

Ответ: 7

Решение: При обосновании алгоритма перевода было показано, что с учетом представления (*) любое число может быть записано в виде:

(c_{k-1} * p^{k-2} + c_{k-2} * p^{k-3} + … + c_{1}) * p + c_{0}

Отсюда следует возможность представить наши числа 77 и 29 следующим образом:

77 = k_{1} * p + 0
29 = k_{2} * p + 1

Следовательно, справедливо соотношение:

49 = (k_{1} – k_{2}) * p

Произведение двух целых, отличных от 1, равно 49 в том и только в том случае, когда:

(k_{1} – k_{2})  =  p = 7

Задача 6: Двузначное число N в системах счисления с основаниями 3 и 7 заканчивается одной и той же цифрой. Укажите минимально возможное значение N.

Ответ: 21

Решение: N представимо в виде:

N = 3k_{1} + c_{0} = 7k_{2} + c_{0}

Следовательно, справедливо соотношение:

3k_{1} = 7k_{2}

Минимальное значение для N получается при:

k_{1} = 7;  k_{2} = 3; N = 21

Алгоритм перевода десятичных чисел в систему счисления с основанием p следует хорошо знать. В ряде задач он используется для разбора десятичного числа на цифры. Зная число цифр в числе, их сумму или произведение, можно найти минимальное, максимальное или все числа, удовлетворяющие заданным характеристикам. Вот несколько задач на эту тему:

Задача 7:

При выполнении фрагмента программы на печать выводятся два числа - 3 и 18.

Каким может быть минимальное (максимальное) значение числа N в этом случае?

  int a = 0, b = 0;
  while (N != 0)
  {
    a = a + 1;  //число цифр в числе
    b = b + N % 10;  //сумма цифр
    N = N / 10;
  }
  Console.WriteLine(" a = " + a.ToString());
  Console.WriteLine(" b = " + b.ToString());
    

Ответ: минимальное N – 189; максимальное N = 990

Решение: Если в качестве основания системы использовать число 10, то алгоритм позволяет разобрать десятичное число на цифры. Переменная a играет роль счетчика цикла, задавая тем самым число цифр в числе. Переменная b в данном фрагменте вычисляет сумму цифр. Задача сводится к определению к-значного числа по заданной сумме его цифр. Если сумма трех цифр числа равна 18, то первой цифрой у числа с минимальным значением может быть цифра 1. Две оставшиеся цифры в сумме дают 17, откуда и следует ответ. Для максимального числа, последней цифрой может быть 0, а две старшие цифры могут быть равны 9.

Задача 8:

При выполнении фрагмента программы на печать выводятся два числа - 3 и 18.

Перечислите все возможные значения числа N в этом случае?

  int a = 0, b = 1;
  while (N != 0)
  {
    a = a + 1;  //число цифр в числе
    b = b * N % 10;  //произведение цифр
    N = N / 10;
  }
  Console.WriteLine(" a = " + a.ToString());
  Console.WriteLine(" b = " + b.ToString());
    

Ответ: (129, 136, 163, 192, 219, 233, 291, 316, 323, 332, 361, 613, 631, 912, 921)

Решение: Эта задача является вариацией предыдущей задачи. Здесь необходимо определить возможное значение трехзначного числа, зная произведение его цифр. В ответе перечислены все возможные решения.

Лекция 1: 12 || Лекция 2 >
Мария Паршикова
Мария Паршикова
Александр Коротенко
Александр Коротенко
Курс "Подготовка к ЕГЭ по информатике". Знаю, что ответ верный, но система его не принимает. Пытался ввести его в разных формах (строчные, прописные, все, одна и т.д.)