#include<iostream>
#include<time.h>
using namespace std;
struct date {
int ngay, thang, nam;
};
bool nhuan(int p) {
if (p % 4 == 0 && p % 100 != 0) return true;
else return false;
}
void taoDate(date*& p) {
p = new date;
p->nam = 0; p->thang = 0; p->ngay = 0;
p->nam = rand()/10;
p->thang = 1 + rand() % (12 - 1);
if (p->thang == 1 || p->thang == 3 || p->thang == 5 || p->thang == 7 ||
p->thang == 8 || p->thang == 10 || p->thang == 12) {
p->ngay = 1 + rand() % (31 - 1);
}
if (p->thang == 4 || p->thang == 6 || p->thang == 9 || p->thang == 11) {
p->ngay = 1 + rand() % (30 - 1);
}
if (nhuan(p->nam)) {
if (p->thang == 2) {
p->ngay = 1 + rand() % (29 - 1);
}
}
else {
if (p->thang == 2) {
p->ngay = 1 + rand() % (28 - 1);
}
}
}
void inDate(date* p) {
cout << p->ngay << "-" << p->thang << "-" << p->nam;
}
int tinhNgayTrongNam(date* p) {
int a;
int dem31 = 0, dem30 = 0, thang2 = 0;
for (int i = 1;i < p->thang;i++) {
if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
dem31++;
}
if (i == 4 || i == 6 || i == 9 || i == 11) {
dem30++;
}
}
if (nhuan(p->nam)) thang2 = 29;
else thang2 = 28;
a = dem31 * 31 + dem30 * 30 + thang2 + p->ngay;
return a;
}
int tinhSoNgayCuaDate(date* p) {
int dem = 0;
int demNhuan = 0;
for (int i = 0;i < p->nam;i++) {
if (nhuan(p->nam)) {
demNhuan++;
}
}
dem = p->nam * 365 + demNhuan + tinhNgayTrongNam(p);
return dem;
}
int khoangCach(date* p, date* q) {
int kc;
int ngayp = tinhSoNgayCuaDate(p);
int ngayq = tinhSoNgayCuaDate(q);
kc = abs(ngayp - ngayq + 1);
return kc;
}
int main() {
date* p; date* q;
srand((unsigned)time(NULL));
taoDate(p);
srand((unsigned)time(NULL)+2);
taoDate(q);
cout << "Date 1: ";
inDate(p);
cout << "\nDate 2: ";
inDate(q);
int kc = khoangCach(p, q);
cout << "\nKhoang cach giua 2 dates la " << kc << " ngay";
delete p;
delete q;
return 0;
}