1. 程式人生 > >【學習筆記】〖九度OJ〗題目1186:列印日期

【學習筆記】〖九度OJ〗題目1186:列印日期

題目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;
}