【題解】a263: 日期差幾天

題目

輸入 2 個日期(y m d),計算日期相隔天數。

ZeroJudge

想法

2000/8/7 ~ 2010/5/20
【2000年天數 – 到8/7天數】+【2001~2009年天數】+【到5/20天數】

  • while(cin!=EOF)。
  • 日期 date1 < date2。
  • 閏年(一年366天):(可整除以4且不可整除以100) 或 (可整除以400)。
  • 4、6、9、11月為 30 天,2月為 28 或 29 天。
  • 若同年則不加 y1。

C++解法

#include <iostream>
using namespace std;
int year(int y){
    if((y%4==0 && y%100!=0) || y%400==0) return 366;
    return 365;
}
int month(int y, int m){
    if(m==2){
        if(year(y)==366) return 29;
        else return 28;
    }
    if(m==4||m==6||m==9||m==11) return 30;
    return 31;
}
int main(){
    int y1, m1, d1, y2, m2, d2;
    while(cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2){
        int ans = 0;
        if(y1*10000+m1*100+d1 > y2*10000+m2*100+d2)
            swap(y1, y2), swap(m1, m2), swap(d1, d2);
        if(y1!=y2) ans += year(y1); //+首年全
        for(int m=1; m<=m1-1; m++) ans -= month(y1, m); //-首年已過月
        ans -= d1; //-首年已過天
        for(int y=y1+1; y<=y2-1; y++) ans += year(y); //+中間年
        for(int m=1; m<=m2-1; m++) ans += month(y2, m); //+尾年月
        ans += d2; //+尾年天
        cout << ans << '\n';
    }
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *