Задача о системах счисления - Pascal

Узнай цену своей работы

Формулировка задачи:

Дано число Х(1 ≤ X ≤ 10^12) в десятичной системе счисления Вывести систему счисления с минимальной основой, в которой число Х будет иметь одинаковые цифры. Пример: 3 ----2 1. «3» – это «11» в системе счисления с основой 2.

Решение задачи: «Задача о системах счисления»

textual
Листинг программы
  1. program test;
  2.  
  3. var
  4.   x: uint64;
  5.   Base: uint64;
  6.   Dividend, Remainder, LastDigit: uint64;
  7.   Res: boolean;
  8.   XisPrime: boolean;
  9. begin
  10.   readln(X);
  11.   XisPrime := True;
  12.   Base := 2;
  13.   while Base < X do
  14.   begin
  15.     Res := True;
  16.     Dividend := X;
  17.     LastDigit := X mod Base;
  18.     XisPrime := XisPrime and (LastDigit <> 0);
  19.     repeat
  20.       Remainder := Dividend mod Base;
  21.       Dividend := Dividend div Base;
  22.       Res := Res and (Remainder = LastDigit);
  23.     until Dividend = 0;
  24.     if Res then
  25.       break;
  26.     Inc(Base);
  27.     if (Base > round(sqrt(X))) and XisPrime then
  28.       Base := X - 1;
  29.   end;
  30.   writeln(Base);
  31. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы