NOJ1008-第几天

第几天

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 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\n%d\n", count, sum );
44         }
45     }
46     return 0;
47 }
时间: 2024-10-16 07:03:20