杭电HDUoj---2005 第几天?c++

目录

写题思路

代码


杭电HDUoj---2005 第几天?c++_第1张图片

写题思路

         首先看到输入那边的格式为YYYY/MM/DD 输入格式为数字,斜杠,数字,斜杠,数字的顺序所以输入时可定义三个整形变量和两个字符变量,用来用整形变量存储年月日,用字符变量过渡斜杠。

int year,month,day;
char str1,str2;
cin >> year >> str1 >> month >> str2 >> day;

        年分平年和闰年,所以在计算几天前需要判断是平年还是闰年,判断条件为:

 判断代码为

if((year%4 == 0&&year%100 != 0) || year%400 == 0)

        输入完变量再进行闰年判断后,就可以进行天数的计算了。

        天数 = 当月之前所有月份的天数相加 + 当月日期,比如我们要计算2006.3.12的天数 = 31 + 28 +12;

        而如果计算2008.3.12那就需要再在31 + 28 +12的基础上再加上1,因为08年为闰年。

        当月之前的所有月份的天数相加可以用一个整形数组和一个循环计算。

计算代码为

int pdaynum[13] = {31,28,31,30,31,30,31,31,30,31,30,31};
for(int i = 0;i < month - 1;i++)
{
	daynum += pdaynum[i];
}

        因为平年闰年之间之差1,所以只需要用一个数组保存平年的每个月的天数即可,最后如果为闰年且月份大于2在总天数上加1即可。

最后附上所有代码

代码

#include
using namespace std;

int main()
{
	int year,month,day;
	char str1,str2;
	int r = 0;
	int daynum;
	int pdaynum[13] = {31,28,31,30,31,30,31,31,30,31,30,31};
	while(cin >> year >> str1 >> month >> str2 >> day)
	{
		daynum = 0;
		r = 0;
		if((year%4 == 0&&year%100 != 0) || year%400 == 0) r = 1;
		for(int i = 0;i < month - 1;i++)
		{
			daynum += pdaynum[i];
		}
		if(r == 1&&month > 2)
			cout << daynum + day + 1 << endl;
		else
			cout << daynum + day << endl;
	}
	return 0;
}

你可能感兴趣的:(HDUoj题目集,c++)