首页 > 代码库 > ACM——第几天

ACM——第几天

第几天

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 1830            测试通过 : 525 

描述

在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100不是闰年,而 1600, 2000 和 2400是闰年。

给定公元2000年1月1日后的某年某月某日(包括2000年1月1日),你的任务:(1)给出这一天从公元2000年1月1日开始逝去的天数,(2)判断这一天是当年的第几天。


输入

 

输入包含若干行,每行包含三个空格间隔的正整数,它们分别表示年、月、日。输入最后一行是−1, 不必处理。可以假设结果的年份不会超过9999。

 

输出

 

多组,每组两行,分别为每行输入所代表的一天从公元2000年1月1日开始逝去的天数、在当年的第几天。

 

样例输入

2000 1 1
2009 3 14
-1

样例输出

0
1
3360
73

题目来源

NUPT

#include<iostream>using namespace std;bool isLeapYear(int &year){	if(year%4==0&&year%100!=0||year%400==0)		return true;	return false;}void calculateDays(int &year,int &month,int &day){		int sumDays=0;	for(int i=2000;i<year;i++){		if(isLeapYear(i))			sumDays+=366;		else			sumDays+=365;	}		int sumDays2=0;	switch(month)	{	case 12:		sumDays2+=30;	case 11:		sumDays2+=31;	case 10:		sumDays2+=30;	case 9:		sumDays2+=31;	case 8:		sumDays2+=31;	case 7:		sumDays2+=30;	case 6:		sumDays2+=31;	case 5:		sumDays2+=30;	case 4:		sumDays2+=31;	case 3:		if(isLeapYear(year))			sumDays2+=29;		else			sumDays2+=28;	case 2:		sumDays2+=31;	case 1:		sumDays2+=day;	}	cout<<sumDays+sumDays2-1<<endl<<sumDays2<<endl;}int main(){	int y,m,d;	while(cin>>y)	{	if(y==-1)			break;		cin>>m>>d;		calculateDays(y,m,d);	}	return 0;}

http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1008

ACM——第几天