• Предмет: Информатика
  • Автор: pofgerbsad
  • Вопрос задан 4 месяца назад

Задано целое число N. Напишите программу, которая которая переставляет цифры числа в обратном порядке.
Формат входных данных
Во входных данных содержится одно целое число N (-2 * 10° < N ≤ 2 * 10°).
Формат выходных данных
Выведите число, которое получается из исходного перестановкой цифр в обратном порядке. Ведущие нули, которые могут оказаться в «перевернутом числе» выводить не надо!
Паскаль


Аноним: Вы уверены, что правильно переписали задание?
-2 * 10° = -2
2 * 10° = 2
Таким образом, ваше целое число попадает в промежуток
{-1, 0, 1, 2}
Отсюда вопрос, какие цифры в этих числах можно переставить?
pofgerbsad: Оно скопировало неправильно там (-2*10 в 9 степени) и то же самое с другой 10 тоже в 9 степени

Ответы

Ответ дал: Аноним
1

Ответ:

program ReverseDigits;
uses
   crt;
const
   MAX_INPUT = 2000000000;
   MIN_INPUT = -2000000000;
var
   N : Int64;
   Remainder : Integer;
   IsUserInputOk : Boolean = false;
   IsInputNegative : Boolean = false;
begin
   repeat
       clrscr;
       write('Введите N: ');
       readln(N);
       if (N > MAX_INPUT) or (N <= MIN_INPUT) then
       begin
           writeln('Число вне допустимого промежутка!');
           writeln('Нажмите любую кнопку, чтобы повторить ввод.');
           readkey();
       end
       else
       begin
           IsUserInputOk := true;
       end;
  until IsUserInputOk;
       if (N < 0) then
       begin
           N := abs(N);
           IsInputNegative := true;
       end;
       while N > 0 do
       begin
           remainder := N mod 10;
           if (remainder <> 0) then
               write(remainder);
           N := N div 10;
       end;
  if (IsInputNegative) then
       write('-');
end.


Обратите внимание, что знак, числа учитывается, т.е.
-123 превратится в 321-
Если вам не нужно разворачивать знак, уберите строки
   if (IsInputNegative) then
       write('-');


pofgerbsad: А нельзя как то попроще с помощью цыкла с условием ?
Аноним: Сейчас поправлю.
pofgerbsad: Спасибо
Аноним: > А нельзя как то попроще с помощью цыкла с условием?
while N > 0 do
begin
remainder := N mod 10;
if (remainder <> 0) then
write(remainder);
N := N div 10;
end;

Это и есть цикл с условием. Только этот код отвечает за перестановку цифр в числе. Всё остальное просто проверяет, действительно ли N в заданном диапазоне.
pofgerbsad: Спасибо большое
Аноним: На знания просто невозможно форматировать код.
Вот в onlinegdb
https://onlinegdb.com/3FSoksYcC
Вас заинтересует