返回题解分享
讨论 / 题解分享/ 帖子详情

回文日期(编程题) - 题解

#include<iostream>

using namespace std;

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

bool get_vaild(int r){
    int y=r/10000,m=r/100%100,d=r%100;
    if(m<=0||m>=13||d<=0) return 0;
    if(m!=2&&d>month[m]) return 0;
    if(m==2){
        int leap=(y%100&&y%4==0)||(y%400==0);
        if(d>28+leap) return 0;
    }
    return 1;
}

int main(){
    int time;
    scanf("%d",&time);
    
    int start=0;
    
    for(int i=time;;i++){
        int x=i/10000,r=x;
        for(int j=0;j<4;j++) r=r*10+x%10,x/=10;
        if(r<=time) continue;
        if(get_vaild(r)){
            start=r;
            printf("%d\n",r);
            break;
        }
    }
    for(int i=start;;i++){
        
        int y=i/1000000,a=y/10%10,b=y%10;
        y=y*100+a*10+b;
        y=y*10000+b*1000+a*100+b*10+a;
        if((a==b)||(y<start)) continue;
        if(get_vaild(y)){
            printf("%d\n",y);
            break;
        }
    }
    
    return 0;
}
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!