第几天
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 2701 测试通过 : 800
总提交 : 2701 测试通过 : 800
比赛描述
在我们现在使用的日历中, 闰年被定义为能被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
思路:一道简单的日期计算问题,除了考虑闰年还有题目中说“从公元2000年1月1日开始逝去的天数”,所以2000.1.1这天就不算了,最后count要减去1
1 #include <cstdio> 2 3 int m[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 4 5 bool Judge( int year ) { 6 if( year % 400 == 0 || ( year % 4 == 0 && year % 100 != 0 ) ) { 7 return true; 8 } 9 return false; 10 } 11 12 int main() { 13 int year, month, day; 14 while( 1 ) { 15 scanf( "%d", &year ); 16 if( year == -1 ) { 17 break; 18 } 19 else { 20 int count = 0;//从2000.1.1开始总的天数 21 int sum = 0;//当年总的天数 22 scanf( "%d%d", &month, &day ); 23 if( Judge( year ) ) { 24 m[2] = 29; 25 } 26 else { 27 m[2] = 28; 28 } 29 for( int i = 1; i < month; i++ ) { 30 sum += m[i]; 31 } 32 sum += day; 33 for( int i = 2000; i < year; i++ ) { 34 if( Judge( i ) ) { 35 count += 366; 36 } 37 else { 38 count += 365; 39 } 40 } 41 count += sum; 42 count -= 1;//2000.1.1这天不计算 43 printf( "%d %d ", count, sum ); 44 } 45 } 46 return 0; 47 }