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) {
break;
}
String string="";
// 这里需要注意,String.format在JDK8及以前版本速度很慢,比手动拼接慢
// string=String.format("%04d%02d%02d", year,m,day);
string=format(year, m, 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;
}
public static String format(int year,int m,int day) {
StringBuilder sBuilder=new StringBuilder();
if(year<1000) {
sBuilder.append("0");
}
if(year<100) {
sBuilder.append("0");
}
if(year<10) {
sBuilder.append("0");
}
sBuilder.append(year);
if(m<10) {
sBuilder.append(0);
}
sBuilder.append(m);
if(day<10) {
sBuilder.append(0);
}
sBuilder.append(day);
return sBuilder.toString();
}
}
这次的拼接字符串写得更加优美,推荐用这种
原本我时用String.format的,但是发现会超时,搜了一下发现在JDK8及以下版本,它的速度比手动拼接还慢,那没办法,只能自己拼接



京公网安备 11010502036488号