Позиционные системы счисления. Представление целых чисел
Формальный алгоритм перевода десятичного числа в систему с основанием 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.
Задача 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)
Решение: Эта задача является вариацией предыдущей задачи. Здесь необходимо определить возможное значение трехзначного числа, зная произведение его цифр. В ответе перечислены все возможные решения.