输入格式
年月日,空格隔开
输出格式
日期增加一天后斜线隔开输出。
请使用成员函数showDate()完成
输入样例
2022 5 6
2022 12 31
2000 2 29
1982 8 31
1996 2 29
2010 12 23
2021 2 28
输出样例
2022/5/7
2023/1/1
2000/3/1
1982/9/1
1996/3/1
2010/12/24
2021/3/1
对于 设置当前日期和显示日期是比较容易完成的,但是对于日期加一天这个函数,我们需要考虑较多的情况:
(1)一年的最后一天,即为12月31号,加一天为下一年的一月一号;
(2)除了第二月,一个月的最后一天,按照大小月分为30或者31天;
[1] 如果日期为非12月的31号那么加一天,一定是下个月的一号;
[2]如果日期为30天,那么根据大小月份,决定(日期加一)或者(月份加一且日期为一)
(3)讨论二月的情况,要根据闰年和平年来进行讨论;
[1]年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)
年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)
即为:年份可以被4整除同时不被100整除 或者 年份被400整除;
[2]闰年 讨论日期是否为29,若为29号则加一天为三月一号;
平年 讨论日期是否为28,若为28号则加一天为三月一号;
(个人编写,仅供参考,自行理解,切勿搬运,若有错误可私信告知,谢谢)
具体示例:
# include
using namespace std;
class CDate
{
private:
int Year, Month, Day;
public:
//构造函数进行初始化
CDate()
{
Year = 1;
Month = 1;
Day = 1;
}
void setDate(int Y, int M, int D);
void increaseDate(int Y, int M, int D);
void showDate();
};
从这里开始是对函数体的实现,一共有三个函数
void CDate::setDate(int Y, int M, int D) { Year = Y; Month = M; Day = D; }
void CDate::showDate() { cout << Year << "/" << Month << "/" << Day << endl; }
//分析不同日期加一天的情况
void CDate::increaseDate(int Y, int M, int D)
{
if (M == 2)//二月的最后一天比较特殊,单独分析
{
if (Y % 4 == 0 && Y % 100 != 0 || Y % 400 == 0)//闰年2月最后一天为29号
{
if (D == 29)//如果是29号,则后一天为三月一号
{
Day = 1;//月期加一
Month += 1;//日期为一
}
else
{
Day += 1;//其他日期,天数加一
}
}
else//非闰年
{
if (D == 28)//如果是28号,则后一天为四月一号
{
Day = 1;
Month += 1;
}
else
{
Day += 1;//其他日期,天数加1
}
}
}
else if (M == 12 && D == 31)//12月31号后一天为一月一号
{
Year += 1;//年份加1
Day = 1;//日期1
Month = 1;//月期1
}
else if (D==30)//日期为30的分两种情况
{
if (M == 1||3||5||7||8||10||12)//大月有31天
{
Day+= 1;//日期加一天
}
else//除二月的小月
{
Month += 1;//月期加1
Day = 1;//日期为1
}
}
else if (M != 12 && D == 31)//非12月的第31天后一天是下个月1号
{
Day = 1;//日期1
Month += 1;///月份加1
}
else
{
Day += 1;
}
}
到这里为止函数体的实现完成
int main()
{
CDate cdate1;
int Y;
int D;
int M;
while (cin >> Y >> M >> D)
{
cdate1.setDate(Y, M, D);
cdate1.increaseDate(Y, M, D);
cdate1.showDate();
}
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)