很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,在2011级同学做这道题时我们刚刚度过这一天!请列出近80年和近60年还有多少个回文日(假如我们能活到百岁,你和我的……)。注意:一年只有12个月。
#include<iostream>
#include<iomanip>
using namespace std;
bool check(int n);//检查是否是回文
int insure(int i,int j);//确定每月的天数
int main()//2000年到2100年的回文日期
{
int num,n;
int i,j,k;
int number=0;
cout<<"回文日期:"<<endl;
for( i=2000;i<2101;i++)
for( j=1;j<13;j++)
{
num=insure(i,j);
for( k=1;k<=num;k++)
{
n=i*10000+j*100+k;
if(check(n))
{
cout<<setfill('0')<<setw(3)<<i<<"年"
<<setw(2)<<j<<"月"<<setw(2)<<k<<"日"<<"\t";
number++;
if(number%2==0)cout<<endl;
}
}
}
return 0;
}
bool check(int n)
{
int m=0;
int s=n;
while(n)
{
m=m*10+n%10;
n=n/10;
}
if(m==s)return true;
else return false;
}
int insure(int i,int j)
{
int num;
switch(j)
{
case 4:
case 6:
case 9:
case 11:num=30;break;
case 2: if((0==i%4&&i%100!=0)||0==i%400)num=29;
else num=28;
break;
default: num=31;break;
}
return num;
}