Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số ngày giữa hai ngày nhất định trong C ++

Trong bài toán này, chúng ta được cung cấp hai mảng date1 [] và date2 bao gồm 3 số nguyên biểu thị DD-MM-YYYY của daes. Nhiệm vụ của chúng ta là tìm số ngày giữa hai ngày nhất định.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

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

Đầu ra

802

Giải thích

Chênh lệch là 2 năm, 2 tháng (3 - 5) và 11 ngày.

2*356 + (30 + 31) + 11 = 802

Phương pháp tiếp cận giải pháp

Một giải pháp đơn giản cho vấn đề là lặp lại, bắt đầu từ ngày bắt đầu date1 đến date2 đếm số ngày. Và trả về giá trị. Cách tiếp cận này không sao cả, nhưng có thể có một cách tiếp cận hiệu quả hơn.

Phương pháp tiếp cận hiệu quả

Một cách tiếp cận hiệu quả hơn cho vấn đề là đếm tổng số ngày cho đến cả ngày date1 [] và date2 []. Và sau đó sự khác biệt tuyệt đối giữa cả hai cho kết quả.

Để đếm số ngày cho đến cả hai ngày1 [] từ 01/01/0000.

NĂM

Số ngày cho đến ngày đầu tiên của năm1 [2]

Number of days = 365*(years) + no. of leap year

THÁNG

Trong một số ngày cho đến ngày đầu tiên của tháng. Đếm từ mảng tháng.

Number of days = monthDays[date[1]].

monthDays sẽ lưu trữ tổng số ngày cho đến ngày đầu tiên của tháng.

NGÀY

Số ngày.

Tổng của tất cả những thứ này cho biết số ngày tính đến ngày date1 []. Sự khác biệt giữa các lần đếm là kết quả.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#include <iostream>
#include <math.h>
using namespace std;
const int monthDays[12] = { 31, 59, 90, 120, 151, 181, 212, 243,
273, 304, 334, 365 };
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 int dayCount1 = (date1[2] * 365);
   dayCount1 += monthDays[date1[1]];
   dayCount1 += date1[0];
   dayCount1 += countLeapYearDays(date1);
   long int dayCount2 = (date2[2] * 365);
   dayCount2 += monthDays[date2[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