题目传送门
思路:
-
输入读取:
- 从标准输入读取两个整数
S
和E
,表示区间的起始和结束。
- 从标准输入读取两个整数
-
回文数判断:
- 定义一个函数
isPalindrome
,用于判断一个整数是否是回文数。 - 将整数转换为字符串。
- 反转字符串。
- 比较原字符串和反转后的字符串,如果相同则该整数是回文数。
- 定义一个函数
-
遍历区间:
- 使用一个循环遍历从
S
到E
的所有整数。 - 对于每个整数,调用
isPalindrome
函数判断是否是回文数。 - 如果是回文数,输出
"Palindrome!"
,否则输出该整数本身。
- 使用一个循环遍历从
-
输出结果:
- 将结果输出到标准输出,每行一个结果。
具体方法:
- 字符串转换:将整数转换为字符串,便于进行回文判断。
- 字符串反转:通过字符串反转操作,判断原字符串和反转后的字符串是否相同。
- 循环遍历:使用循环遍历指定区间内的所有整数,逐一进行回文判断。
注意事项:
- 由于
S
和E
的范围可能非常大(最大到10^18
),所以使用long long
类型来存储这些值。 - 题目要求输出
E - S + 1
行结果,确保循环从S
到E
遍历所有数字。
代码实现:
C++代码 :
#include <iostream>
#include <string>
#include <algorithm>
// 判断一个整数是否是回文数
bool isPalindrome(long long num) {
std::string str = std::to_string(num);
std::string rev_str = str;
std::reverse(rev_str.begin(), rev_str.end());
return str == rev_str;
}
int main() {
long long S, E;
std::cin >> S >> E;
for (long long i = S; i <= E; ++i) {
if (isPalindrome(i)) {
std::cout << "Palindrome!" << std::endl;
} else {
std::cout << i << std::endl;
}
}
return 0;
}
代码解释:
isPalindrome
函数将整数转换为字符串,反转字符串并比较原字符串和反转后的字符串。main
函数读取输入的S
和E
,遍历区间[S, E]
,对每个数字调用isPalindrome
函数并输出结果。
Pascal代码 :
program PalindromicFizzBuzz;
uses sysutils;
function isPalindrome(num: Int64): Boolean;
var
str, rev_str: string;
i: Integer;
begin
str := IntToStr(num);
rev_str := '';
for i := Length(str) downto 1 do
rev_str := rev_str + str[i];
isPalindrome := str = rev_str;
end;
var
S, E, i: Int64;
begin
readln(S, E);
for i := S to E do
begin
if isPalindrome(i) then
writeln('Palindrome!')
else
writeln(i);
end;
end.
代码解释:
isPalindrome
函数将整数转换为字符串,反转字符串并比较原字符串和反转后的字符串。- 主程序读取输入的
S
和E
,遍历区间[S, E]
,对每个数字调用isPalindrome
函数并输出结果。
Python代码:
def is_palindrome(num):
str_num = str(num)
return str_num == str_num[::-1]
S, E = map(int, input().split())
for i in range(S, E + 1):
if is_palindrome(i):
print("Palindrome!")
else:
print(i)
代码解释:
is_palindrome
函数将整数转换为字符串,反转字符串并比较原字符串和反转后的字符串。- 读取输入的
S
和E
,遍历区间[S, E]
,对每个数字调用is_palindrome
函数并输出结果。