Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int YEAR_MAX = 9092;
- int n;
- string s, dString, mString, yString;
- int dInt, mInt, yInt;
- bool isLeap(int year){
- return ((year % 4 == 0) && (year % 100 != 0));
- }
- bool isDate(int d, int m, int y){
- if(m < 1 || m > 12) return false;
- if(d < 1 || d > 31) return false;
- if(m == 2){
- if(isLeap(y)) return (d <= 29);
- else return (d <= 28);
- }
- if(m == 4 || m == 6 || m == 9 || m == 11)
- return (d <= 30);
- return true;
- }
- bool dateCompare(int d1, int m1, int y1, int d2, int m2, int y2)
- {
- if(y1 > y2) return true;
- if(m1 < m2)
- return false;
- else if(m1 == m2)
- return (d1 > d2);
- return true;
- }
- int getInt(string s){
- int res=0;
- for(int i=0;i<s.size();i++)
- res = res*10 + (s[i] - '0');
- return res;
- }
- void printPalindromeDate()
- {
- cin>>s;
- dInt = getInt(s.substr(0,2));
- mInt = getInt(s.substr(3,2));
- yInt = getInt(s.substr(6,4));
- for(int year = yInt; year <= YEAR_MAX; year++)
- {
- string str = to_string(year);
- while(str.size() < 4)
- str.insert(0,"0");
- string rev = str;
- reverse(rev.begin(), rev.end());
- int day = getInt(rev.substr(0, 2));
- int month = getInt(rev.substr(2, 2));
- if(isDate(day, month, year) && dateCompare(day, month, year, dInt, mInt, yInt))
- {
- rev.insert(2,".");
- cout<<rev<<"."<<str<<"."<<endl;
- return;
- }
- }
- }
- int main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- freopen("DATE.INP","r",stdin);
- freopen("DATE.OUT","w",stdout);
- cin>>n;
- for(int i=0; i<n; i++)
- printPalindromeDate();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement