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.
请将改好的和思路一起发上来。 展开
我写了一个程序,请帮忙看看!!
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.
请将改好的和思路一起发上来。 展开
展开全部
双杠线后是错误原因
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。
我原来的做法忘掉了。临时想的,可能会有点烦。
回文数有很多种做法,楼主可以再想想
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。
我原来的做法忘掉了。临时想的,可能会有点烦。
回文数有很多种做法,楼主可以再想想
展开全部
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.
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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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.
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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
太简单了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询