fork(2) download
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. long JDay(int year, int month, int day) {
  6. if (month <= 2) {
  7. year--;
  8. month += 12;
  9. };
  10. unsigned long J;
  11. int A = year / 100;
  12. A = 2 - A + (A / 4);
  13. J = 1461L * long(year);
  14. J /= 4L;
  15. unsigned long K = 306001L * long(month + 1);
  16. K /= 10000L;
  17. J += K + day + 1720995L + A;
  18. return J;
  19. }
  20.  
  21. void GDate(long JD, int& y, int& m, int& d) {
  22. unsigned long A = (JD * 4L - 7468865L) / 146097L;
  23. A = (JD > 2299160) ? JD + 1 + A - (A / 4L) : JD;
  24. long B = A + 1524;
  25. long C = (B * 20L - 2442L) / 7305L;
  26. long D = (C * 1461L) / 4L;
  27. long E = (10000L * (B - D)) / 306001L;
  28. d = int(B - D - ((E * 306001L) / 10000L));
  29. m = int((E <= 13) ? E - 1 : E - 13);
  30. y = int(C - ((m > 2) ? 4716 : 4715));
  31. }
  32.  
  33. int main() {
  34. int day, month, year;
  35. cout << "Введите день, месяц, год: ";
  36. cin >> day >> month >> year;
  37. cout
  38. << setfill('0') << "Ваша дата: " << setw(2) << day << "."
  39. << setw(2) << month << "." << year << endl;
  40. long jd = JDay(year, month, day);
  41.  
  42. for (int m = 1; m <= 1000; m *= 10) {
  43. cout << "Дата через " << m << " дней: ";
  44. GDate(jd + m, year, month, day);
  45. cout << setw(2) << day << "." << setw(2) << month << "." << year <<
  46. endl;
  47. }
  48. }
  49.  
Success #stdin #stdout 0s 4540KB
stdin
04 04 2020
stdout
Введите день, месяц, год: Ваша дата: 04.04.2020
Дата через 1 дней: 05.04.2020
Дата через 10 дней: 14.04.2020
Дата через 100 дней: 13.07.2020
Дата через 1000 дней: 30.12.2022