前言:
21考研,不论能否进复试记录一下准备路上写下的垃圾代码。本来啃《算法笔记》,但是感觉太多了做不完,改做王道机试指南。
题目描述:
给出年分m和一年中的第n天,算出第n天是几月几号。
输入描述
包括两个整数y(1<=y<=3000),n(1<=n<=366)。
输出描述:
可能有多组测试数据,对于每组数据,
按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
解答:
#include <stdio.h>
const int daytab[2][13] = {
{
0,31,28,31,30,31,30,31,31,30,31,30,31},
{
0,31,29,31,30,31,30,31,31,30,31,30,31}
};
bool isleapyear(int year) {
return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
}
int main()
{
int year, mon=0, day, date ;
while (scanf("%d %d", &year, &date) != EOF) {
for (int i = 0; i<13; i++)
{
if ((date - daytab[isleapyear(year)][i]) > 0)
date -= daytab[isleapyear(year)][i];
else break;
mon++;
}
day = date;
printf("%02d-%02d-%02d\n", year, mon, day);
mon = 0;
}
return 0;
}