您的位置:首页 > 其它

soj 1814

2011-04-04 10:48 232 查看
水啊水啊,今天上soj,随便点了一道中文题 - -。。。中奖了,日期差计算

#include <iostream>
#include <stdio.h>
using namespace std;
int y1, m1, d1;
int y2, m2, d2;
int mdays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void swap() {
    int tmp = y1;
    y1 = y2;
    y2 = tmp;
    tmp = m1;
    m1 = m2;
    m2 = tmp;
    tmp = d1;
    d1 = d2;
    d2 = tmp;
}
bool isLeap(int year) {
    if(year % 400 == 0) return true;
    if(year % 4 == 0 && year % 100 != 0) return true;
    return false;
}
int main() {
    int t;
    cin >> t;
    while(t--) {
        scanf("%d.%d.%d", &y1, &m1, &d1);
        scanf("%d.%d.%d", &y2, &m2, &d2);
        if(y1 > y2) swap();
        else if(y1 == y2) {
            if(m1 > m2) swap();
            else if(m1 == m2 && d1 > d2) swap();
        }
        int ans = 0;
        if(y1 == y2) {
            if(m1 == m2) {
                ans = d2 - d1;
                cout << ans << endl;
                continue;
            }
            
            if(isLeap(y1)) mdays[2] = 29;
            else mdays[2] = 28;
            ans += mdays[m1] - d1;
            for(int i = m1 + 1; i < m2; i++) ans += mdays[i];
            ans += d2;
            cout << ans << endl;
            continue;
        }
        if(isLeap(y1)) mdays[2] = 29;
        else mdays[2] = 28;
        ans += mdays[m1] - d1;
        for(int i = m1 + 1; i <= 12; i++) ans += mdays[i];
        for(int i = y1 + 1; i < y2; i++) {
            if(isLeap(i)) ans += 366;
            else ans += 365;
        }
        if(isLeap(y2)) mdays[2] = 29;
        else mdays[2] = 28;
        for(int i = 1; i < m2; i++) ans += mdays[i];
        ans += d2;
        cout << ans << endl;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: