Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm số ngày giữa hai ngày cho trước trong C++

Giới thiệu

Cho hai ngày dưới dạng mảng date1[], date2[] (DD, MM, YYYY). Tính số ngày chênh lệch giữa chúng.

Ví dụ minh họa

Đầu vào

date1[] = {13, 3, 2021}, date2[] = {24, 5, 2023}

Đầu ra

802

Giải thích

Chênh lệch: 2 năm, 2 tháng (3→5), 11 ngày.
2*365 + (30+31) + 11 = 802

Phương pháp hiệu quả: Tính ngày tuyệt đối

Tính tổng số ngày từ 01/01/0000 đến mỗi ngày, lấy hiệu tuyệt đối.

  • Năm: 365 * năm + số năm nhuận
  • Tháng: Sử dụng mảng tiền tố monthDays[] lưu ngày tích lũy đầu tháng
  • Ngày: Cộng thêm ngày của tháng hiện tại

Chương trình minh họa

#include <iostream>
#include <cmath>
using namespace std;

const int monthDays[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };

int countLeapYearDays(int d[]) {
    int years = d[2];
    if (d[1] <= 2) years--;
    return (years / 4) - (years / 100) + (years / 400);
}

int countNoOfDays(int date1[], int date2[]) {
    long dayCount1 = date1[2] * 365L;
    dayCount1 += monthDays[date1[1] - 1];
    dayCount1 += date1[0];
    dayCount1 += countLeapYearDays(date1);

    long dayCount2 = date2[2] * 365L;
    dayCount2 += monthDays[date2[1] - 1];
    dayCount2 += date2[0];
    dayCount2 += countLeapYearDays(date2);

    return abs(dayCount1 - dayCount2);
}

int main() {
    int date1[3] = {13, 3, 2021};
    int date2[3] = {24, 5, 2023};
    cout << "The number of days between two dates is " << countNoOfDays(date1, date2);
    return 0;
}

Đầu ra

The number of days between two dates is 802

Lưu ý: Mảng monthDays đã được sửa để 0-based indexing (tháng 1 tại index 0).