题目描述:
给出年份 y和一年中的第 d天,算出第 d天是几月几号。
输入格式
输入包含多组测试数据。
每组数据占一行,包含两个整数 y 和 d。
输出格式
每组数据输出一行一个结果,格式为 yyyy-mm-dd
。
数据范围
输入最多包含 100100 组数据,
1≤y≤3000,
1≤d≤366,
数据保证合法。
输入样例:
2000 3
2000 31
2000 40
2000 60
2000 61
2001 60
输出样例:
2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
#include<iostream>
#include<algorithm>
#include<unordered_map>
//闰年判断方法是 百年不闰!
using namespace std;
unordered_map<int,int> m_d = { {1,31},{2,28},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31} };
void f(int year,int days){
int month,day;
unordered_map<int,int> fm_d = m_d;
//闰年 31 + 29 = 60
if(year % 100 && year % 4 == 0 || year % 400 == 0){
fm_d[2] = 29;
}
for(int i = 1;i <= 12;i ++){
if(days - fm_d[i] <= 0){
month = i;
day = days;
break;
}
days = days - fm_d[i];
}
printf("%04d-%02d-%02d\n",year,month,day);
}
int main(){
int year,days;
while(cin >> year >> days){
f(year,days);
}
return 0;
}
简单题WA了很多次,很粗心,闰年判断方法要记住,百年不闰,而400年又闰。
输出格式一定要注意,用0替补的要注意。