Задача о системах счисления - 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.

Объяснение кода листинга программы

  1. Объявляется переменная x типа uint64.
  2. Объявляется переменная Base типа uint64.
  3. Объявляются переменные Dividend, Remainder, LastDigit типа uint64.
  4. Объявляется переменная Res типа boolean.
  5. Объявляется переменная XisPrime типа boolean и инициализируется значением True.
  6. Считывается значение переменной x с помощью функции readln.
  7. Устанавливается значение переменной XisPrime как True.
  8. Устанавливается начальное значение переменной Base как 2.
  9. Создается цикл while, который выполняется пока Base меньше X.
  10. Внутри цикла устанавливается значение переменной Res как True.
  11. Dividend устанавливается равным x.
  12. LastDigit устанавливается равным остатку от деления x на Base.
  13. Переменная XisPrime устанавливается как логическое И между ее текущим значением и проверкой, что LastDigit не равен 0.
  14. Происходит цикл repeat-until, в котором вычисляется остаток от деления Dividend на Base, далее Dividend делится на Base.
  15. Переменная Res устанавливается как логическое И между ее текущим значением и проверкой, что остаток равен LastDigit.
  16. Цикл повторяется, пока Dividend не равно 0.
  17. Если Res истинно, то программа выходит из цикла.
  18. Увеличивается значение переменной Base на 1.
  19. Если Base больше, чем целая часть от квадратного корня из X и XisPrime истинно, то Base устанавливается равным X - 1.
  20. Значение Base выводится с помощью функции writeln.

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы