
Найти уровень палиндромности заданного числа М.
Код решения:
*****
type mas=array[0..1000] of integer;
VAR i, mm, count, m, temp:longint;
s:string;
sm, old, new, mt:mas;
function check (st:mas):boolean;
var t, j:longint;
flag:boolean;
begin
t:=st[0];
flag:=true;
j:=1;
while flag and (j<=t div 2) do
begin
if st[j]<>st[t-j+1] then flag:=false;
inc(j);
end;
check:=flag;
end;
procedure perev(a:mas; var per:mas);
var t, tt:integer;
begin
for t:=1 to a[0] div 2 do
begin
tt:=a[t];
a[t]:=a[a[0]-t+1];
a[a[0]-t+1]:=tt;
end;
per:=a;
end;
procedure dig_to_str(h:longint; var st:mas);
var i:integer;
ch:char;
stemp:string;
begin
str(h, stemp);
for i:=1 to length (stemp) do
st[i]:=ord(stemp[length(stemp)-i+1])-48;
st[0]:=length(stemp);
end;
procedure sum_two_str(s1,s2:mas; var s3:mas);
var ln, i, per, dod1, dod2, sum:integer;
begin
per:=0;
ln:=s1[0];
for i:=1 to ln do
begin
s3[i]:=s1[i]+s2[i]+per;
per:=s3[i] div 10;
s3[i]:=s3[i] mod 10;
end;
if per=1 then begin s3[i+1]:=per; s3[0]:=s3[0]+1; end;
end;
BEGIN
readln (m);
fillchar(old, sizeof(old),0);
fillchar(mt, sizeof(mt),0);
fillchar(sm, sizeof(sm),0);
count:=0;
dig_to_str (m, sm);
old:=sm;
while not(check(sm)) do
begin
inc (count);
perev(old, mt);
sum_two_str(old, mt, sm);
new:=sm;
old:=new;
end;
writeln (count);
end.
VAR i, mm, count, m, temp:longint;
s:string;
sm, old, new, mt:mas;
function check (st:mas):boolean;
var t, j:longint;
flag:boolean;
begin
t:=st[0];
flag:=true;
j:=1;
while flag and (j<=t div 2) do
begin
if st[j]<>st[t-j+1] then flag:=false;
inc(j);
end;
check:=flag;
end;
procedure perev(a:mas; var per:mas);
var t, tt:integer;
begin
for t:=1 to a[0] div 2 do
begin
tt:=a[t];
a[t]:=a[a[0]-t+1];
a[a[0]-t+1]:=tt;
end;
per:=a;
end;
procedure dig_to_str(h:longint; var st:mas);
var i:integer;
ch:char;
stemp:string;
begin
str(h, stemp);
for i:=1 to length (stemp) do
st[i]:=ord(stemp[length(stemp)-i+1])-48;
st[0]:=length(stemp);
end;
procedure sum_two_str(s1,s2:mas; var s3:mas);
var ln, i, per, dod1, dod2, sum:integer;
begin
per:=0;
ln:=s1[0];
for i:=1 to ln do
begin
s3[i]:=s1[i]+s2[i]+per;
per:=s3[i] div 10;
s3[i]:=s3[i] mod 10;
end;
if per=1 then begin s3[i+1]:=per; s3[0]:=s3[0]+1; end;
end;
BEGIN
readln (m);
fillchar(old, sizeof(old),0);
fillchar(mt, sizeof(mt),0);
fillchar(sm, sizeof(sm),0);
count:=0;
dig_to_str (m, sm);
old:=sm;
while not(check(sm)) do
begin
inc (count);
perev(old, mt);
sum_two_str(old, mt, sm);
new:=sm;
old:=new;
end;
writeln (count);
end.
*****
Комментариев нет:
Отправить комментарий