題目描述:
-
有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數爲兩天
- 輸入:
-
有多組數據,每組數據有兩行,分別表示兩個日期,形式爲YYYYMMDD
- 輸出:
-
每組數據輸出一行,即日期差值
- 樣例輸入:
-
20110412 20110422
- 樣例輸出:
-
11
題目分析:
這是交大09年的機試題,屬於日期處理類型簡單題。
對於輸入,可以取巧輸入2個整數,避免輸入字符串後的複雜處理。
可自己手寫一個簡單的leap()函數判斷閏年。
計算出起始年1月1日至起始日期的天數sum1,
再計算出起始年1月1日至最終日期的天數sum2,
則sum2 - sum1 + 1即爲所求。
源代碼:
#include <stdio.h> #include <stdlib.h> bool leap(int year) { if((year%4==0 && year%100!=0) || year%400==0) return 1; else return 0; } int main() { int month[2][13] ={ {0, 31, 28, 31,30, 31, 30, 31, 31, 30, 31, 30, 31},{0, 31, 29, 31,30, 31, 30, 31, 31, 30, 31, 30, 31}}; // 每月的天數 int year[2] = {365, 366}; // 平年/閏年天數 int start, end; while(scanf("%d%d", &start, &end)!=EOF) //讀入年月日 { int year1 = start/10000; //計算起始年月日 int month1 = (start%10000)/100; int day1 = start%100; int year2 = end/10000; //計算最終年月日 int month2 = (end%10000)/100; int day2 = end%100; int i, j; int sum1 = day1; for(i=1; i<month1; i++) sum1 += month[leap(year1)][i]; //計算sum1 int sum2 = day2; for(i=1; i<month2; i++) sum2 += month[leap(year2)][i]; for(j=year1; j<year2; j++) sum2 += year[leap(j)]; //計算sum2 printf("%d\n", sum2 - sum1 + 1); } //system("pause"); return 0; } /************************************************************** Problem: 1096 User: superlc320 Language: C++ Result: Accepted Time:0 ms Memory:1020 kb ****************************************************************/