题目描述
给出年分m和一年中的第n天,算出第n天是几月几号。
输入
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
输出
可能有多组测试数据,对于每组数据,按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
样例输入
2013 60
2012 300
2011 350
2000 211
样例输出
2013-03-01
2012-10-26
2011-12-16
2000-07-29
代码
#include<cstdio>
int month[13][2] = {{0,0}, {31,31}, {28,29}, {31,31}, {30,30}, {31,31}, {30,30}, {31,31}, {31,31}, {30,30}, {31,31}, {30,30}, {31,31}};
bool isleap(int year){
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main(){
int y,n; //y年份n第几天
int m; //月份
int i; //确定月份循环使用
while(scanf("%d %d", &y, &n) != EOF){
m = 1;
i = 1;
while(n > month[i][isleap(y)]){
n -= month[i][isleap(y)];
m++;
i++;
}
printf("%04d-%02d-%02d\n", y, m, n);
}
return 0;
}
总结:解题主要在于利用累加的思想满足这个月的天数则就到了下个月。
新知识点:题目中printf中输出整数一定位数不足数位用0补充,%mnd,用m补充空缺位,n为数据的数位。