对于判断是否是闰年的函数,得到x年x月有多少天以及x年的有多少天,熟练编写。
#include <iostream>
using namespace std;
const int months[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
int is_leap(int year){//四年闰,百年不闰,400年再闰
if(year % 4 == 0 && year % 100 || year % 400 == 0)
return 1;
return 0;
}
int get_month_days(int y, int m){//x年x月有x天
if(m == 2) return months[m] + is_leap(y);
return months[m];
}
int get_year_days(int y, int m){x年有x天
if(m <= 2) return 365 + is_leap(y);//今年
return 365 + is_leap(y + 1);//明年
}
int main(){
int t;
cin >> t;
while(t --){
int y, m, d, a;
cin >> y >> m >> d >> a;
if(m == 2 && d == 29) m = 3, d = 1, a --;//特判
while(a > get_year_days(y, m)){//一年为单位变化
a -= get_year_days(y, m);
y ++;
}
while(a --){//一天为单位变化
if(++ d > get_month_days(y, m)){
d = 1;
if(++ m > 12){
m = 1;
y ++;
}
}
}
printf("%04d-%02d-%02d\n", y, m, d);
}
return 0;
}