Skip to content

1073: 小恶魔的生日(20年期末机考模考T3)

题目

题目描述

小恶魔助教的生日要到了,所以她发现可以让大家写个日期类纪念一下~

于是她想让大家写个Date(可惜这不代表你能拥有一个Date :(

你需要完成以下内容:

  • Date d; 无参数即构造一个日期为1900年1月1日的日期。 Date d(yy, mm, dd) 构造一个yy年mm月dd日的日期。请注意检查该日期是否存在,若不存在则默认构造一个日期为1900年1月1日的日期。
  • 前置++/--, 后置++/--,其中++d/d++表示d变为后一天,对应的,--d/d--表示d变为前一天。
  • 日期d+整数days,日期d-整数days。两个操作均返回一个日期。+为给定日期的后days天,-为给定日期的前days天。
  • < 比较符。d1 < d2 若真返回1,若假返回0。注意比较方法按照年-月-日的顺序进行。例如,"2018年12月3日<2019年11月1日" 为真。
  • 日期-日期:给定两个日期d1, d2, (d1-d2)表示二者之间间隔的天数。例如,2019年12月3日与2019年12月1日间隔2天,以此类推。请注意所有输出为正整数,即取绝对值。
  • 输出日期。输出格式为 _year-_month-_day . 中间以'-'相连。例如,2019年12月3日输出为 "2019-12-3"(不含双引号,不需要补0)。请注意,此操作请使用重载输出运算符。但若无法实现,为保证其他操作的测试顺利进行,也请你写一个out()函数来进行输出(主程序部分可以采用注释里的写法)。此操作不会单独进行测试,但如果检查代码时发现你未重载输出运算符,你的所有得分将*0.8(例如你测试结果为60,未重载输出运算符会使你的得分变为48).
  • 此题需要你注意提交代码的代码风格!!!极为糟糕的代码风格(例如改变语法的某些宏定义)会酌情扣分!!!
  • 只可以在输出方式的选择上修改给定部分的代码,其余更改给定部分代码的需求请在考场上提问,否则后果自负。

输入格式

第一行一个$op$表示操作号。 其余输入具体见给定代码的主程序部分。

输出格式

输出方式详见主程序。 你的out函数中需要进行换行。

样例输入

0 1926 8 17 1999 12 21 2021 1 1 1926 8 17

样例输出

1900-1-1 2000-2-29 1900-1-1 1926-8-18 1926-8-19 1926-8-20 1926-8-21 1926-8-22 1926-8-22 1926-8-23 1926-8-24 1926-8-25 1926-8-26 1926-8-27 1926-8-26 1926-8-25 1926-8-24 1926-8-23 1926-8-21 1926-8-20 1926-8-20 2000-3-30 1997-3-26 0 5168

数据范围

保证测试日期在1900年1月1日到2030年12月31日之间。

测试点编号 | op| 测试点分值 -|-|-| 1 | 1 | 10 2 | 2 | 20 3 | 3 | 20 4 | 4 | 10 5 | 5 | 20 6 | 0 | 20

sample.cpp如下

```C++

include

include

include

using namespace std; const int month_days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; class Date { private: int _year; int _month; int _day; public: //构造函数 //判断是否为闰年 //一个日期加上一个天数 //一个日期减去一个天数 //前置++ //后置++ //前置-- //后置-- //<重载 //重载输出运算符 //以上仅为提示,不代表你需要完成所有,你也可以添加其他需要的函数。 };

void Test() { int op; cin >> op; int yy, mm, dd; if (op == 1 || op == 0) { Date d0; Date d1(2000, 2, 29); Date d2(1900, 2, 29); cout << d0 << endl; cout << d1 << endl; cout << d2 << endl; //d0.out(); d1.out(); d2.out(); } if (op == 2 || op == 0) { cin >> yy >> mm >> dd; Date d0(yy, mm, dd); for (int i=0;i<5;++i) cout << ++d0 << endl; //(++d0).out(); for (int i=0;i<5;++i) cout << d0++ << endl; //(d0++).out(); for (int i=0;i<5;++i) cout << d0-- << endl; //(d0--).out(); for (int i=0;i<2;++i) cout << --d0 << endl; //(--d0).out(); cout << d0 << endl; //d0.out(); } if (op == 3 || op == 0) { cin >> yy >> mm >> dd; Date d0(yy, mm, dd); cout << d0 + 100 << endl; // (d0+100).out(); cout << d0 - 1000 << endl; // (d0-1000).out(); } if (op == 4 || op == 0) { cin >> yy >> mm >> dd; Date d0(yy, mm, dd); Date d1(2020, 12, 21); cout << (d0 < d1) << endl; } if (op == 5 || op == 0) { cin >> yy >> mm >> dd; Date d0(yy, mm, dd); Date d1(1912, 6, 23); cout << d0 - d1 << endl; } } int main() { Test(); return 0; } ```

Oops! 本题目还没有解答!

助教老师们编题的速度,已经超过了解题的速度!

OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。

如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!