日期差值计算

给定两个日期,求出两个日期的差值,如果两个日期是连续的,则规定它们之间的天数为两天。

样例输入
20130101
20130105

样例输出
5

#include <iostream>
#include <string.h>
using namespace std;

bool isLeapYear(int year) {
    if (year%400==0 || (year%4==0 && year%100!=0)) {
        return true;
    }
    return false;
}

void split(int date, int &y, int &m, int &d) {
    y = date/10000;
    m = (date%10000)/100;
    d = date%100;
}

int dayOfYear(int date) {
    int year, month, day;
    int res = 0;
    split(date, year, month, day);
    if (isLeapYear(year)) {
        switch(month) {
        case 12:
            res += 30;
        case 11:
            res += 31;
        case 10:
            res += 30;
        case 9:
            res += 31;
        case 8:
            res += 31;
        case 7:
            res += 30;
        case 6:
            res += 31;
        case 5:
            res += 30;
        case 4:
            res += 31;
        case 3:
            res += 29;
        case 2:
            res += 31;
        case 1:
            res += day;
            break;
        }
    } else {
        switch(month) {
        case 12:
            res += 30;
        case 11:
            res += 31;
        case 10:
            res += 30;
        case 9:
            res += 31;
        case 8:
            res += 31;
        case 7:
            res += 30;
        case 6:
            res += 31;
        case 5:
            res += 30;
        case 4:
            res += 31;
        case 3:
            res += 28;
        case 2:
            res += 31;
        case 1:
            res += day;
            break;
        }
    }
    return res;
}

int main() {
    int date1, y1, m1, d1;
    int date2, y2, m2, d2;

    cin >> date1;
    cin >> date2;

    if (date1 > date2) {
        date1 = date1 ^ date2;
        date2 = date1 ^ date2;
        date1 = date1 ^ date2;
    }

    split(date1, y1, m1, d1);
    split(date2, y2, m2, d2);

    int res = 1;

    for (int i = y1; i < y2; i++) {
        if (isLeapYear(i)) {
            res += 366;
        } else {
            res += 365;
        }
    }

    res -= dayOfYear(date1);
    res += dayOfYear(date2);

    cout << res << endl;

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32273417/article/details/86674041