zoj 2420 Calendar

#include "iostream"
#include "vector"
#include "string"
using namespace std;

struct Info//注意这里的类型要为short,如果是int的情况下会超内存!
{
	short int year;
	short int day;
	short int month;
};

bool IsLeapYear(int num)//判断是否为闰年!
{
	if ((num % 400 == 0) || (num % 4 == 0 && num % 100 != 0))//两种情况都需要考虑啊!尤其为第二种,比较容易出错!
		return true;
	else
		return false;
}

int main()
{
	vector<Info> v;
	Info temp;
	for (int i = 2000; i <= 9999; i++)
	{
		for (int j = 1; j <= 12; j++)
		{
			if ((j == 1) || (j == 3) || (j == 5) || (j == 7) || (j == 8) || (j == 10) || (j == 12))
			{
				for (int k = 1; k <= 31; k++)
				{
					temp.year = i;
					temp.month = j;
					temp.day = k;
					v.push_back(temp);
				}
			}
			else if (j == 2)
			{
				if (IsLeapYear(i))
				{
					for (int k = 1; k <= 29; k++)
					{
						temp.year = i;
						temp.month = j;
						temp.day = k;
						v.push_back(temp);
					}
				}
				else 
				{
					for (int k = 1; k <= 28; k++)
					{
						temp.year = i;
						temp.month = j;
						temp.day = k;
						v.push_back(temp);
					}
				}
			}
			else if ((j == 4) || (j == 6) || (j == 9) || (j == 11))
			{
				for (int k = 1; k <= 30; k++)
				{
					temp.year = i;
					temp.month = j;
					temp.day = k;
					v.push_back(temp);
				}
			}
		}
	}

	int days;
	while (cin >> days && days != -1)
	{
		string str;
		int n = days % 7;
		if (n == 1)
			str = "Sunday";
		else if (n == 2)
			str = "Monday";
		else if (n == 3)
			str = "Tuesday";
		else if (n == 4)
			str = "Wednesday";
		else if (n == 5)
			str = "Thursday";
		else if (n == 6)
			str = "Friday";
		else if (n == 0)
			str = "Saturday";
		cout << v[days].year << "-" ;
		if (v[days].month < 10)
		   cout << "0" << v[days].month << "-";
		else
		    cout << v[days].month << "-";
		if (v[days].day < 10)
			cout << "0" << v[days].day << " " << str << endl;
		else
			cout <<  v[days].day << " " << str << endl;
	}
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值