九度OJ 1096 :日期差值

題目描述:

有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數爲兩天

輸入:

有多組數據,每組數據有兩行,分別表示兩個日期,形式爲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
****************************************************************/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章