【学习笔记】〖九度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
来源:
2003-2005年华中科技大学计算机研究生机试真题
答疑:
解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7909-1-1.html



//本题利用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
", year, i+1, day);
    }
 
    return 0;
}




原文地址:https://www.cnblogs.com/ymjia/p/3590306.html