Как поменять местами цифры в числе без использования временных переменных?
Учитель задал нам задачу: на вход пятизначное число. Затем у этого пятизначного числа берутся первые два и последние два числа, затем меняются местами. Например: 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 шт):
Нужно последние две и среднюю цифру числа домножить на 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