题目
代码
#include <bits/stdc++.h>
using namespace std;
int day[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool has_2(int x)
{while (x){if (x % 10 == 2)return true;x /= 10;}return false;
}
bool check(int y, int m, int d)
{return has_2(y) || has_2(m) || has_2(d);
}
bool is_run(int y, int m)
{if (m != 2)return false;if (y % 400 == 0)return true;if (y % 4 == 0 && (y % 100))return true;return false;
}
int main()
{int y = 1900, m = 1, d = 1;int cnt = 0;for (;; d++){if (d > day[m] + is_run(y, m)){d = 1;m++;}if (m > 12){m = 1;y++;}if (check(y, m, d))cnt++;if (y == 9999 && m == 12 && d == 31)break;}cout << cnt;return 0;
}
注意
处理日期之后,在循环体内退出
处理日期之后再进行日期判断