【學習筆記】〖九度OJ〗題目1186:列印日期
阿新 • • 發佈:2019-02-13
題目1186:列印日期
時間限制:1 秒
記憶體限制:32 兆
特殊判題:否
提交:2549
解決:918
- 題目描述:
-
給出年分m和一年中的第n天,算出第n天是幾月幾號。
- 輸入:
-
輸入包括兩個整數y(1<=y<=3000),n(1<=n<=366)。
- 輸出:
-
可能有多組測試資料,對於每組資料,
按 yyyy-mm-dd的格式將輸入中對應的日期打印出來。
- 樣例輸入:
-
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
//本題利用Hash思想,將對應平閏年各月分天數儲存,免去條件判斷
#include<iostream> #include<cstring> #include<stdio.h> using namespace std; int dofm[2][12] = {31, 28 ,31,30,31,30,31,31,30,31,30,31, 31, 29 ,31,30,31,30,31,31,30,31,30,31}; int isR(int year) { int res = 0; if (year%400 == 0) { return 1; } if (year%4 == 0) { if (year%100 == 0) { return 0; } res = 1; } return res; } int main() { int year, day, i,j; while (cin >> year >> day) { j = isR(year); for (i=0; i<12; i++) { if (day > dofm[j][i]) { day -= dofm[j][i]; } else break; } printf("%04d-%02d-%02d\n", year, i+1, day); } return 0; }