Позиционные системы счисления. Представление целых чисел
Формальный алгоритм перевода десятичного числа в систему с основанием p
Алгоритм достаточно прост. На пальцах он выглядит так. Необходимо последовательно делить число на p - основание системы счисления. Остатки от деления дают цифры для записи числа в системе с основанием p.
Приведу обоснование алгоритма:
Воспользуемся представлением (*) для записи числа N.
- Положим  ; ;
- Представим число M в виде:   
- Нетрудно видеть:  , где операция % означает остаток от деления; , где операция % означает остаток от деления;
- Вычислим новое значение  где операция / означает деление нацело. Результатом этой операции является число, от которого отрезана последняя цифра; Полученное число сохраняет представление (*). где операция / означает деление нацело. Результатом этой операции является число, от которого отрезана последняя цифра; Полученное число сохраняет представление (*).
- Операции 3 и 4 будем повторять  раз, получая каждый раз очередную цифру в разложении раз, получая каждый раз очередную цифру в разложении по степеням основания по степеням основания . .
Вот как выглядит точная запись этого алгоритма в виде функции на языке С#:
  /// <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
Решение: При обосновании алгоритма перевода было показано, что с учетом представления (*) любое число может быть записано в виде:

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


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

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

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

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

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

Алгоритм перевода десятичных чисел в систему счисления с основанием p следует хорошо знать. В ряде задач он используется для разбора десятичного числа на цифры. Зная число цифр в числе, их сумму или произведение, можно найти минимальное, максимальное или все числа, удовлетворяющие заданным характеристикам. Вот несколько задач на эту тему:
Задача 7:
При выполнении фрагмента программы на печать выводятся два числа - 3 и 18.
Каким может быть минимальное (максимальное) значение числа  в этом случае?
 в этом случае? 
  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());
    Ответ: минимальное  ; максимальное
; максимальное 
Решение: Если в качестве основания системы использовать число 10, то алгоритм позволяет разобрать десятичное число на цифры. Переменная a играет роль счетчика цикла, задавая тем самым число цифр в числе. Переменная  в данном фрагменте вычисляет сумму цифр. Задача сводится к определению к-значного числа по заданной сумме его цифр. Если сумма трех цифр числа равна 18, то первой цифрой у числа с минимальным значением может быть цифра 1. Две оставшиеся цифры в сумме дают 17, откуда и следует ответ. Для максимального числа, последней цифрой может быть 0, а две старшие цифры могут быть равны 9.
 в данном фрагменте вычисляет сумму цифр. Задача сводится к определению к-значного числа по заданной сумме его цифр. Если сумма трех цифр числа равна 18, то первой цифрой у числа с минимальным значением может быть цифра 1. Две оставшиеся цифры в сумме дают 17, откуда и следует ответ. Для максимального числа, последней цифрой может быть 0, а две старшие цифры могут быть равны 9.
Задача 8:
При выполнении фрагмента программы на печать выводятся два числа - 3 и 18.
Перечислите все возможные значения числа  в этом случае?
 в этом случае? 
  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)
Решение: Эта задача является вариацией предыдущей задачи. Здесь необходимо определить возможное значение трехзначного числа, зная произведение его цифр. В ответе перечислены все возможные решения.
 
                             
