Free pascal语言

判断一个整数是否为回文数(正过来读与反过来读相同)。我写了一个程序,请帮忙看看!!programex1;vara:longint;i,j,l:integer;letter... 判断一个整数是否为回文数(正过来读与反过来读相同)。

我写了一个程序,请帮忙看看!!
program ex1;
var
a:longint;
i,j,l:integer;
letter:array[1..9]of integer;
begin
read(a);
l:=0;
while a<>0 do
begin
l:=l+1;letter[l]:=a mod 10;a:=a div 10
end;
i:=1; j:=1;
while(letter[i]=letter[j])and(i>=j)do
begin
i:=i-1;
j:=j+1;
end;
if j<1 then writeln('YES')
else writeln('NO');
end.

请将改好的和思路一起发上来。
展开
 我来答
邛旺GM
2011-11-26 · 超过12用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:46.5万
展开全部
双杠线后是错误原因
program ex1;
var
a:longint;
i,j,l:integer;
letter:array[1..9]of integer;
begin
read(a);
l:=0;
while a<>0 do
begin
l:=l+1;letter[l]:=a mod 10;a:=a div 10
end;
i:=1; j:=1; //因为你上面将原数倒着放到了数组letter里,你这么做肯定是错误的,并且你的i初值应该是l吧。
while(letter[i]=letter[j])and(i>=j)do
begin
i:=i-1;
j:=j+1;
end;
if j<1 then writeln('YES')
else writeln('NO');
end.

我的程序:(pascal打不开,有错你再说)
Var letter:array[1,,10000] of integer;
i,j,n,ws,m:longint;
Begin
ws:=0;
readln(n);
m:=n;
while m<>0 do
begin
inc(ws);
m:=m div 10;
end;
for i:=ws downto 1 do
begin
letter[i]:=n mod 10;
n:=n div 10;
end;
j:=1;
for i:=ws downto (ws-(ws div 2)+1) do
begin
if letter[i]<>letter[j] then
begin
writeln('NO');
halt;
end;
inc(j);
end;
writeln('YES');
end.
我的思路:
如果位数是单数,那么最中间的就不用考虑,5的话就是判断1,2和4,5;
那么就是(位数-位数div2+1).与从1开始的比较。
例输入23432
那么先求出了位数为5,
然后从5 downto (5-2+1)判断是否与1,2相等。
如果有不相等的,则立即输出 NO,并直接退出程序(这不太好,可以用一个布尔。但我懒得用了
- -)
反则到最后输出YES.
偶数的话也同样,如4。
就是(4-2+1),4到3和1到2比较。
例1221。
我原来的做法忘掉了。临时想的,可能会有点烦。
回文数有很多种做法,楼主可以再想想
超级小迈
2011-11-26 · 超过21用户采纳过TA的回答
知道答主
回答量:137
采纳率:83%
帮助的人:21.1万
展开全部
var
s:tring;
i:longint;
b:boolean;
begin
readln(s);b:=true;
for i:=1 to length(s) div 2 do
if s[i] <> s[length(s)-i] then b:=false;
if b then write('Yes')
else write('No');
readln;
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
罗应送2001523
2011-11-26 · TA获得超过218个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:131万
展开全部
var
a:string;
i,j,l:integer;
begin
read(a); //读入数字
i:=length(a); j:=1; //i和j赋值
while (a[i]=a[j]) and(i>=j) do //判断a[i]是否等于a[j]和i要>=j
begin //满足则进入
i:=i-1; j:=j+1; //判断下一组数
end;
if i<=j then writeln('YES')
else writeln('NO'); //判断i是否小于等于j,满足输出YES,否则数输出NO
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
readln
2011-11-25 · 贡献了超过134个回答
知道答主
回答量:134
采纳率:0%
帮助的人:40.7万
展开全部
太简单了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式