printf(“%02d”, a); 表示a如果不够两位前面补0, %3d,不够3位前面补0, ....
以下中间判断2月份最好分开写,写{},不然很容易写Bug
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool check_vaild(int year, int month, int day)
{
if(month < 1 || month > 12) return false;
if(day == 0) return false;
if(month != 2 && day > days[month]) return false;
int leap = year % 100 && year % 4 == 0 || year % 400 == 0;
if(month == 2 && day > 28 + leap) return false;
return true;
}
完整代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool check_vaild(int year, int month, int day)
{
if(month < 1 || month > 12) return false;
if(day == 0) return false;
if(month != 2 && day > days[month]) return false;
int leap = year % 100 && year % 4 == 0 || year % 400 == 0;
if(month == 2 && day > 28 + leap) return false;
return true;
}
int main()
{
int a, b, c;
scanf("%d/%d/%d", &a, &b, &c);
for(int i = 19600101; i <= 20591231; i ++ )
{
int year = i / 10000, month = i % 10000 / 100, day = i % 100;
if(check_vaild(year, month, day))
{
if(year % 100 == a && month == b && day == c ||
year % 100 == c && month == a && day == b ||
year % 100 == c && month == b && day == a)
printf("%d-%02d-%02d\n", year, month, day);
}
}
return 0;
}