作业帮 > 综合 > 作业

pascal程序:回文数

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/05/14 22:30:26
pascal程序:回文数
若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数.
例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数.
又如:对于10进制数87:
STEP1:87+78 = 165 STEP2:165+561 = 726
STEP3:726+627 = 1353
STEP4:1353+3531 = 4884
在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884.
写一个程序,给定一个N(2
pascal程序:回文数
type
num=array[1..10000]of integer;
var
a:string;
b:num;
i,j,k,n:longint;
ci:integer;
procedure init;
begin
readln(a);
for i:=1 to length(a)do
if a[i]in['0'..'9']then val(a[i],b[i])
else b[i]:=ord(a[i])-55;
end;
function pan:boolean;
begin
pan:=true;
for i:=1 to (k div 2) do
pan:=pan and(b[i]=b[k-i+1]);
end;
procedure jia;
var i,jin:longint;p:num;
begin
fillchar(p,sizeof(p),0);
for i:=1 to k do
p[i]:=b[i]+b[k-i+1];
for i:=1 to k do
begin
p[i+1]:=p[i+1]+p[i] div n;
p[i]:=p[i]mod n;
end;
if p[k+1]0 then k:=k+1;
b:=p;
end;
begin
readln(n);
init;
k:=length(a);
ci:=0;
repeat
ci:=ci+1;
jia;
until (pan)or(ci=31);
if ci=31 then writeln('STEP=30')
else writeln('STEP=',ci);
end.
再问: 似乎“if a[i]in['0'..'9']then val(a[i],b[i])”错了呀
再答: 你用的是 fpc 2.0.4? 2.6.0上测试无误