讨论 / [NOIP2016普及组T2] 回文日期 满分程序
xihb183 2019-08-12 23:59:20
点我顶贴 收藏 删除
/*

[NOIP2016普及组T2] 回文日期

满分程序

*/

#include <iostream>

using namespace std;

bool is_run(int year) //是否为闰年

{

return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

}

bool is_hui_wen(int d) //是否为回文,只有8位就没有用递归算法

{

return (d / 10000000 == d % 10) && (d / 1000000 % 10 == d % 100 /10) && (d / 100000 % 10 == d % 1000 /100) && (d / 10000 % 10 == d % 10000 /1000);

}

int days_in_month(int year,int month) //每月有多少天

{

static int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

int tian;

if (month!=2)

tian = days[month];

else {

if (is_run(year))

tian = days[month] + 1;

else

tian = days[month];

}

return tian;

}

int main()

{

int date1,date2;

int count = 0;//回文日期个数

cin >> date1 >> date2;

bool flag = false; //当到达结束日期date2时flag为true

for (int y = date1 / 10000; ;y++) {

if (flag == true) break;

for (int m = 1;m <= 12;m++) {

if (flag == true) break;

int tian; //每月有多少天

tian = days_in_month(y,m);

for (int d = 1;d <= tian;d++){

int day = y * 10000 + m * 100 + d;

if (day > date2) {

flag = true;

break;

}

if (is_hui_wen(day))

count ++;

}

}

}

cout << count;

return 0;

}

查看更多回复
提交回复