import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int month[]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
		int a=scanner.nextInt();
		int b=scanner.nextInt();
		int year1=a/10000;
		int month1=a/100%100;
		int day1=a%100;
		int year2=b/10000;
		int month2=b/100%100;
		int day2=b%100;
		int count=0;
		for (int year = year1; year <= year2; year++) {
			if(leap(year)) {
				month[2]=29;
			}else {
				month[2]=28;
			}
			for (int m = 1; m <= 12; m++) {
				if(year==year1&&m<month1) {
					continue;
				}
				for (int day = 1; day <= month[m]; day++) {
					if(year==year1&&m==month1&&day<day1) {
						continue;
					}
					if(year==year2&&m==month2&&day>day2) {
						return;
					}
					String string="";
					if(m<10) {
						string=year+""+"0"+m;
						if(day<10) {
							string+="0"+day;
						}else {
							string+=day;
						}
					
					}else {
						string=year+""+m;
						if(day<10) {
							string+="0"+day;
						}else {
							string+=day;
						}
					}
					if(huiwen(string)) {
						count++;
					}
					
					
				}
			}
		}
		System.out.println(count);

	}
	public static boolean leap(int year) {
		if(year%400==0||(year%4==0&&year%100!=0)) {
			return true;
		}
		return false;
	}
	public static boolean huiwen(String string) {
//		直接使用字符串翻转判断是否是相同的,以此来判断是否是回文
		StringBuilder sBuilder=new StringBuilder(string);
//		注意下面的StringBuilder用法存在问题,因为直接使用sBuilder翻转,会把反转后的对象也赋值给sBuilder2,
//		也就是说,这两个完全就是同一个
//		StringBuilder sBuilder2=sBuilder.reverse();
		if(sBuilder.reverse().toString().equals(string)) {
			return true;
		}
		return false;
	}

}

这道题可以直接模拟每一个日期,然后针对每一个日期进行判断是否为回文日期,首先,我们需要根据输入的两个日期获取到对应的年月日,为后面遍历做准备,然后,开始遍历,在遍历年份的时候需要判断是否为闰年,如果是闰年,就把2月份的日期设置为29天,反之,就设置为28天。接下来遍历月和日,这里需要注意要把不符合条件的日期给排除。我在做的时候,日的结束范围那里多加了一个等号,直接少过三个测试点。

在判断是否为回文日期那里,我是采用StringBuilder翻转toString后与原来的string做判断,这样写会快一些,但是我一开始写错了,我并没有意识到直接把sBuilder.reverse()赋值给sBuilder2其实是把对象赋给它了,也就是这两个指向的是同一个东西,那么内容肯定也是一样的。