#include <bits/stdc++.h>
using namespace std;
//平年每月的天数
const int months[] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
//判断是否是闰年
bool is_leap(int y)
{
if(y % 400 == 0 || (y % 100 && y % 4 == 0)) return true;
return false;
}
//获得y年第m月的天数
int get_days(int y, int m)
{
if(m == 2) return months[m] + is_leap(y);
return months[m];
}
//获得y年第m月--y + 1年第m月的的天数
int get_year_days(int y, int m)
{
if(m <= 2) return (365 + is_leap(y));
return (365 + is_leap(y + 1));
}
int main()
{
int t;
cin >> t;
int y, m, d, days;
while(t -- )
{
cin >> y >> m >> d >> days;
if(m == 2 && d == 29)
{
days --;
m = 3, d = 1;
}
while(days > get_year_days(y, m))
{
days -= get_year_days(y, m);
y ++;
}
while(days --)
{
d ++;
if(d > get_days(y, m))
{
m ++, d = 1;
if(m > 12) y ++, m = 1;
}
}
printf("%04d-%02d-%02d\n", y, m, d);
}
return 0;
}
if(m == 2 && d == 29)
{
days –;
m = 3, d = 1;
}
这为什么要加判断
刚开始是2月29,需要特殊判断一下
谢谢 明白了