problem
给你一个小于等于(10^{9})的数,问你能不能在这个数的前加前导(0),是这个数变成回文数。能则输出YES
,否则输出NO
。
thinking
主要思路:判断回文数
我们可以把题目中的加前导(0)替换成删除末尾的(0)。
证明:
- 如果末尾没有(0)且这个数原来不是回文数,那么你前面不管怎么加(0)都不会成回文数;
- 如果末尾有(0),则你可以通过删除末尾所有的(0)来达到加前导(0)的效果。
(对“所有”的解释:不删除末尾所有的(0),此数肯定不是回文数,因为自然数是没有前导(0)的)
拿样例举例:
131
这个数本来就是回文数,所以直接输出(YES)。
320
首先先判断这个数是不是回文数,发现不是,则删除末尾所有的(0),原数变为(32),再判断是否为回文数,发现不是,则输出(NO)。
2010200
首先先判断这个数是不是回文数,发现不是,则删除末尾所有的(0),原数变为(20102),再判断是否为回文数,发现是回文数,则输出(YES)。
program
献上丑码代码
var
n:string;
function hws(n:string):string;
var
i:longint;
begin
for i:=1 to length(n) div 2 do if n[length(n)-i+1]<>n[i] then exit('NO');
exit('YES');
end;//判断是否为回文数
begin
readln(n);
while n[length(n)]='0' do delete(n,length(n),1);//删除所有的末尾0
write(hws(n));
end.