Задача о системах счисления - Pascal
Формулировка задачи:
Дано число Х(1 ≤ X ≤ 10^12) в десятичной системе счисления
Вывести систему счисления с минимальной основой, в которой число Х будет иметь одинаковые цифры.
Пример:
3 ----2
1. «3» – это «11» в системе счисления с основой 2.
Решение задачи: «Задача о системах счисления»
textual
Листинг программы
- program test;
- var
- x: uint64;
- Base: uint64;
- Dividend, Remainder, LastDigit: uint64;
- Res: boolean;
- XisPrime: boolean;
- begin
- readln(X);
- XisPrime := True;
- Base := 2;
- while Base < X do
- begin
- Res := True;
- Dividend := X;
- LastDigit := X mod Base;
- XisPrime := XisPrime and (LastDigit <> 0);
- repeat
- Remainder := Dividend mod Base;
- Dividend := Dividend div Base;
- Res := Res and (Remainder = LastDigit);
- until Dividend = 0;
- if Res then
- break;
- Inc(Base);
- if (Base > round(sqrt(X))) and XisPrime then
- Base := X - 1;
- end;
- writeln(Base);
- end.
Объяснение кода листинга программы
- Объявляется переменная
x
типа uint64. - Объявляется переменная
Base
типа uint64. - Объявляются переменные
Dividend
,Remainder
,LastDigit
типа uint64. - Объявляется переменная
Res
типа boolean. - Объявляется переменная
XisPrime
типа boolean и инициализируется значением True. - Считывается значение переменной
x
с помощью функции readln. - Устанавливается значение переменной
XisPrime
как True. - Устанавливается начальное значение переменной
Base
как 2. - Создается цикл while, который выполняется пока
Base
меньшеX
. - Внутри цикла устанавливается значение переменной
Res
как True. Dividend
устанавливается равнымx
.LastDigit
устанавливается равным остатку от деленияx
наBase
.- Переменная
XisPrime
устанавливается как логическое И между ее текущим значением и проверкой, чтоLastDigit
не равен 0. - Происходит цикл repeat-until, в котором вычисляется остаток от деления
Dividend
наBase
, далееDividend
делится наBase
. - Переменная
Res
устанавливается как логическое И между ее текущим значением и проверкой, что остаток равенLastDigit
. - Цикл повторяется, пока
Dividend
не равно 0. - Если
Res
истинно, то программа выходит из цикла. - Увеличивается значение переменной
Base
на 1. - Если
Base
больше, чем целая часть от квадратного корня изX
иXisPrime
истинно, тоBase
устанавливается равнымX - 1
. - Значение
Base
выводится с помощью функции writeln.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д