历届试题 回文日期

又是喜闻乐见的日期题。

枚举年份,构造回文日期和ABABBABA型的回文日期,判断构造出的日期是否合法。

注意构造出的日期不能和当前日期相等。

int month[2][13]={
    {0,31,28,31,30,31,30,31,31,30,31,30,31},
    {0,31,29,31,30,31,30,31,31,30,31,30,31}
};

bool isLeap(int year)
{
    return year % 4 == 0 && year % 100 || year % 400 == 0;
}

bool check(int yy,int mm,int dd)
{
    if(mm == 0 || mm > 12) return false;
    if(dd == 0 || dd > month[isLeap(yy)][mm]) return false;
    return true;
}

int main()
{
    int n;
    cin>>n;

    int yy=n/10000,mm=n%10000/100,dd=n%10000%100;
    for(int i=yy;i<10000;i++)
    {
        int t=i,res=0;
        while(t)
        {
            res=res*10+t%10;
            t/=10;
        }

        int yy=i,mm=res/100,dd=res%100;
        int m=yy*10000+mm*100+dd;
        if(m != n && check(yy,mm,dd))
        {
            printf("%d%02d%02d
",yy,mm,dd);
            break;
        }
    }

    for(int i=yy/100;i<100;i++)
    {
        int t=i*100+i,res=0;
        while(t)
        {
            res=res*10+t%10;
            t/=10;
        }

        int yy=i*100+i,mm=res/100,dd=res%100;
        int m=yy*10000+mm*100+dd;
        if(m != n && check(yy,mm,dd))
        {
            printf("%d%02d%02d
",yy,mm,dd);
            break;
        }
    }
    //system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14672219.html