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

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

#include<bits/stdc++.h>

using namespace std;

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


//判断日期合法性 
bool check_date(int date){ //date=2014 10 23
	int year = date/10000; //分离出年 -->2014
	int month = date%10000/100; //分离出月 %10000后:1023 再/100后-->10
	int day = date%100;   //分离出日 --> 23 
	
	//判断所拿到的数据是否合法 
	if(!day||month<=0||month>12) return false;
	if(month !=2 && day>months[month]) return false;
	//如果是2月 判断闰年情况 
	if(month==2) 
		if((year%4==0 && year%100!=0) || year%400==0){
			//是闰年
			if(day>29) return false;
			else{
				if(day>28) return false;
			} 
		}
	return true;
}

//判断是否是回文数 -->8位数--》头尾相等 
bool check_huiwenshu(string str){
	for(int i=0,j=(str.length()-1);i<j;i++,j--){ ////两个变量当两个指针, 一个从头一个从尾用if判断
		if(str[i] != str[j]) return false;
	}
	return true;
} 

//判断回文数是否是ABABBABA型
bool check_ABABBABA(string str){
	//先判断是否是回文数 
	if(check_huiwenshu(str)){
		//在判断是否是 ABABBABA型
		if(str[0] != str[2] || str[1] != str[3]) return false;
		
		return true;
	}
	return false;
}

int main(){
	int date,flag=0;
	cin>>date;
	for(int i=date+1;;i++){
		if(check_date(i)){  //判断日期是否合法
			string str=to_string(i); ////判断完后将年月日从数字转化为字符串,方便进行回文判断
			if(check_huiwenshu(str) && !flag){  //判断是否是回文数 
				cout<<i<<endl;
				flag=1;
			}
			if(check_ABABBABA(str)){ //判断是否是ABABBABA型
				cout<<i<<endl;
				return 0;
			} 
		}
	}
	
	return 0;
}
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!