算法1
思路:这种有关于日期的题,最长用的三个函数,需要背一下!!!代码不难,但需要好好理解,下面解释很详细,一看就可以懂
//这几个函数最好背一下,经常要用
const int months[13]{
0,31,28,31,30,31,30,31,31,30,31,30,31
};
int is_leap(int year)//判断是否是闰年的函数
{
if(year%4==0 && year%100 ||year%400==0)
return 1;
return 0;
}
int get_day(int y,int m)//处理2月份
{
if(m==2)return months[m]+is_leap(y);
return months[m];
}
C++ 代码
#include<iostream>
#include<cstring>
#include<algorithm>
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)//判断是否是闰年的函数
{
if(year%4==0 && year%100 ||year%400==0)
return 1;
return 0;
}
int get_day(int y,int m)//处理2月份
{
if(m==2)return months[m]+is_leap(y);
return months[m];
}
int main()
{
int y,s;
while(cin>>y>>s)//输入年和天
{
int m=1,d=1;//m来控制月的变化,d控制日的变化
s--;//每年第一天也算一天,所以需要提前减减
while(s--)
{
if(++d>get_day(y,m))//如果超过这个月的最大天数,另d=1,重新从一个月的第一天开始算起
{
d=1;
if(++m>12)//如果超过12个月了,来到新的一年,月份从1月重新算
{
m=1;
y++;
}
}
}
printf("%04d-%02d-%02d\n",y,m,d);
}
return 0;
}