AcWing 1229. 日期问题
原题链接
简单
作者:
月色美兮
,
2022-02-25 20:38:54
,
所有人可见
,
阅读 177
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 101;
int a,b,c;
int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int date)//判断日期合法性模板
{
int year = date / 10000; //年
int month = date % 10000 / 100; //月
int day = date % 100; //日
if(!month || month > 12 || !day ) return false;//如果月份大于12或者为零或者天数为零则该日期不合法
if(month != 2 && day > months[month]) return false;//在不是二月的情况下,该月实际天数大于该月最大天数,则该日期不合法
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;
}
int main()
{
scanf("%d/%d/%d", &a,&b,&c);
for(int i=19600101;i<=20591231;i++){
if(check(i)){
int year=i/10000,month=i%10000/100,day=i%100;
if(year%100==a&&month==b&&day==c||month==a&&day==b&&year%100==c||day==a&&month==b&&year%100==c){
printf("%d-%02d-%02d\n",year,month,day);//将输出的前面补上0,直到占满指定列宽为止
}
}
}
return 0;
}