判断闰年
int is_leap(int year)
{
if (year % 4 == 0 && year % 100 || year % 400 == 0)
return 1;
return 0;
}
判断合法日期
bool check(int x){
int n=x/10000;
int y=x/100%100;
int r=x%100;
if(y>12||y<1||r==0) return false;
if(y==2){
if((n%4==0&&n%100!=0)||n%400==0){//判断闰年
if(r>29||r==0) return false;
}
else{
if(r>months[y]) return false;
}
}
else{
if(r>months[y]) return false;
}
return true;
}
判断回文日期(包括ababbaba型)
bool check1(string s) //判断是否是回文日期
{
int len = s.size();
for(int i = 0, j = len - 1; i < j ; i++,j--) //双指针
{
if(s[i] != s[j]) return false;
}
return true;
}
bool check2(string s) //判断是否是ABABBABA 型的回文日期
{
if(check1(s)) //首先该日期要满足回文格式
{
if(s[0]!=s[2] || s[1]!= s[3] || s[0] == s[1]) return false;
return true;
}
return false;
}
手动构造回文日期
(减少时间复杂度)
for (int i = 0; i < 10000; i ++ )
{
int x = i, r = i;
for (int j = 0; j < 4; j ++ ) r = r * 10 + x % 10, x /= 10;
if (r >= l && r <=ra && check(r)) res ++ ;
}
/*
1011010
1100110
1111110
1200210
1211210
1300310
1400410
1500510
1600610
1700710
1800810
1900910
*/