日历问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15046309/article/details/82194591

在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。

输入

输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是−1, 不必处理。可以假设结果的年份不会超过9999。

输出

对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" 或 "Saturday“。

样例输入

1730 
1740 
1750 
1751 
-1

样例输出

2004-09-26 Sunday 
2004-10-06 Wednesday 
2004-10-16 Saturday 
2004-10-17 Sunday

提示

2000.1.1. 是星期六

注意事项:首先要注意格式问题,一月一日为01-01,注意0。

保留有效数字的方法:

头文件#include<iomanip>

cout<<setfill('0')<<setw(2)<<数字;

以后写题的时候如果底下有用循环的i之类的,先在之前声明了,for循环里不在声明。

总之还是注意格式问题。

#include<iostream>
#include<iomanip>
using namespace std;
int Isrun(int a)
{
	if (a % 4 != 0 || (a % 100 == 0 && a % 400 != 0))
	{
		return 0;
	}
	else
	{
		return 1;
	}
}
int main()
{
	int years[2] = { 365,366 };
	int days;
	int Month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	int MonthR[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };
	char week[7][10] = {"Saturday", "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
	cin >> days;
	while (days!=-1)
	{
		int type = days % 7;
		int i = 2000; int j = 1;
		for (i = 2000; days >= years[Isrun(i)]; i++)
		{
			days -= years[Isrun(i)];
	
		}
		if (Isrun(i)==0)
		{
			for (j = 1; days>=Month[j];j++)
			{
				days -= Month[j];
			}
		}
		else
		{
			for (j= 1; days >= MonthR[j];j++)
			{
				days -= MonthR[j];
			}
		}
		cout << i << "-";
		cout << setfill('0') << setw(2) << j << "-";
		cout << setfill('0') << setw(2) << days+1 <<" "<<week[type]<< endl;
		cin >>days;
	}

}

猜你喜欢

转载自blog.csdn.net/qq_15046309/article/details/82194591