import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); // 起始日期 int b = scanner.nextInt(); // 终止日期 scanner.close(); int count = 0; // 遍历所有可能的回文日期 // 8位回文日期的特点:前4位与后4位对称,如20211202 // 因此只需遍历前4位,后4位由前4位反转得到 int startYear = a / 10000; int endYear = b / 10000; for (int year = startYear; year <= endYear; year++) { // 生成回文日期 int palindromeDate = generatePalindromeDate(year); // 检查是否在区间内 if (palindromeDate >= a && palindromeDate <= b) { // 检查日期是否合法 if (isValidDate(palindromeDate)) { count++; } } } System.out.println(count); } /** * 根据年份生成可能的回文日期 * 例如:年份2021,生成回文日期20211202 */ private static int generatePalindromeDate(int year) { // 将年份转为字符串 String yearStr = String.format("%04d", year); // 反转年份字符串得到日期部分 String reversedYear = new StringBuilder(yearStr).reverse().toString(); // 组合成8位回文日期 return Integer.parseInt(yearStr + reversedYear); } /** * 检查日期是否合法 */ private static boolean isValidDate(int date) { // 解析年、月、日 int year = date / 10000; int month = (date % 10000) / 100; int day = date % 100; // 检查月份合法性 if (month < 1 || month > 12) { return false; } // 检查日期合法性 if (day < 1) { return false; } // 大月有31天 if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return day <= 31; } // 小月有30天 else if (month == 4 || month == 6 || month == 9 || month == 11) { return day <= 30; } // 2月,考虑闰年 else { // month == 2 if (isLeapYear(year)) { return day <= 29; } else { return day <= 28; } } } /** * 判断是否为闰年 * 能被4整除但不能被100整除,或能被400整除的年份是闰年 */ private static boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } }