TransWikia.com

Вывод числа посимвольно в прямом и обратном виде на Pascal

Stack Overflow на русском Asked on January 31, 2021

Написать программу которая на вход получает число произвольной длины,
а на выходе выдаёт число в прямом виде и число наоборот на следующей
строке. Решить наиболее рациональным способом.

Пример на вход: 7652 На выводе: 7 6 5 2 2 5 6 7

есть решение через строки и без пробелов – их могу доделать но задача не на это

program revoptimal;
var a:int64;
begin
readln(a);
writeln(a);
writeln(ReverseString(inttostr(a)));
end.

3 Answers

Если вы делаете эту программу в PascalABC.NET и подаваемое на вход значение не нужно проверять, т.е. оно точно является натуральным числом, то можно всё очень сильно упростить:

begin
  var S : String;
  ReadLn(S);
  foreach var C in S do Print(C);
  foreach var C in S.ToCharArray.Reverse do Print(C);
  WriteLn;
end.

Если, всё же, необходимо использовать именно числовые переменные без преобразований в строку, то можно сделать вот так:

begin
  var N := ReadLnInteger;
  var D := 1;
  while D * 10 < N do D *= 10;
  repeat
    Print(N mod (D * 10) div D);
    D := D div 10;
  until D = 0;
  repeat
    Print(N mod 10);
    N := N div 10;
  until N = 0;
end.

Answered by Jurii on January 31, 2021

Могут быть синтаксические ошибки. Давно на нём не писал

function rk(a: integer, d: integer)
begin
   if(a > 0)
   begin
     if d = 1
       begin
         Write(a Mod 10)
       end
     rk(a Div 10, d);
     if d = 2
       begin
         Write(a Mod 10)
       end

   end
end



begin
  rk(7652, 1);
  WriteLn('');

  rk(7652, 2);
  WriteLn('');
end

Answered by Mrak on January 31, 2021

// Функция возведения 10 в степень n
function Extend(n: integer): integer;
var
  i: integer;
  r: integer;
begin
  r := 1;
  for i := 1 to n do
    r := r * 10;
  Result := r;
end;

var
  x: string;
  y: integer;
  z: string;
  m: integer;
  i: integer;
begin
  // Читаем введенное число
  ReadLn(x);
  // Переводим его в целочисленный тип
  y := StrToInt(x);
  WriteLn('input: ', y);
  z := '';

  for i := 0 to Length(x) - 1 do
    begin
      // Берем число по модулю 10 от остатка от деления на степень 10

      // В виде строки
      z := z + IntToStr((y Div Extend(i)) Mod 10);
      // В виде числа
      m := m + ((y Div Extend(i)) Mod 10) * Extend(Length(x) - (i + 1));
    end;
  WriteLn('output: ', z);
  WriteLn('output: ', m);
end.

Answered by slippyk on January 31, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP