Как поменять местами цифры в числе без использования временных переменных?

Учитель задал нам задачу: на вход пятизначное число. Затем у этого пятизначного числа берутся первые два и последние два числа, затем меняются местами. Например: Input: 24158, Output: 58124. Если два передних и задних числа, а также число посередине будут занимать по одной переменной, всего будет 4 переменных. А у нас задание: сократить число переменных до 2-х! Т.е. 1-я переменная - само число, 2-я переменная - все действия внутри числа.

Program Z_1;

var
  x, a, b, c: LongInt;

begin
  Randomize;
  x := random(89999) + 10000;
  writeln('Число: ', x);
  a := x div 1000;
  b := x mod 100;
  c := x div 100 mod 10;
  writeln('Результат: ', b,c,a);
end.

Должно получиться:

Program Z_1;

var
  x, a: LongInt;

begin
  Randomize;
  x := random(89999) + 10000;
  writeln('Число: ', x);
  a := ... ;
  writeln('Результат: ', a);
end.

Подскажите, как можно сократить число переменных до требуемого?


Ответы (1 шт):

Автор решения: Scourde

Нужно последние две и среднюю цифру числа домножить на 1000, 100 соответственно.

var
x, a: LongInt;

begin
  Randomize;
  x := random(89999) + 10000;
  writeln('Число: ', x);
  writeln('1 место: ', x mod 100);
  writeln('2 место: ', x div 100 mod 10);
  writeln('3 место: ', x div 1000);
  a := ((x mod 100)*1000 + (x div 100 mod 10)*100 + (x div 1000));
  writeln('Результат: ', a)
end.

Пример работы:

Число: 54651
1 место: 51
2 место: 6
3 место: 54
Результат: 51654

Объяснение: На 1 место должны встать последние 2 цифры числа (51), мы домножаем их на 1000, чтобы они как бы "встали на 1 место" (Итог этого умножения: 51 * 1000 = 51000), середину числа (6) мы оставляем на своем месте, для этого мы домножаем на 100 (Итог этого умножения: 51000 + 600 = 51600), первые две цифры числа (54) просто перебрасываем в конец без умножения (51600 + 54 = 51654). Результат: 51654

→ Ссылка