题解 | #日期累加#

日期累加

http://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d

C++方法 实现一个日期类的累加,返回相加后的日期结果,那就必须对日期类的+运算符做重载。 重载方法如下:

Date Date::operator+(int n)
{
	int year = _year;
	int month = _month;
	int day = _day;
	int days = GetMonthDay(year, month);

	while (day + n > days)
	{
		month++;
		if (month > 12)
		{
			year++;
			month = 1;
		}
		n -= days;
		days = GetMonthDay(year, month);//取每月天数
	}
	day += n;
	return Date(year, month, day);
}

然后我们对输出运算符做重载,便于输出,重载时要注意,输出运算符最好重载为友元函数,并且我们根据输出要求,不满10的月份和年份前添加0.代码如下

ostream& operator<<(ostream& out, const Date& d)
{
    if(d._month<10&&d._day<10)
        out << d._year << "-" <<0<< d._month << "-" <<0<< d._day;
    else if(d._month>=10&&d._day<10)
        out << d._year << "-" << d._month << "-" <<0<< d._day;
    else if(d._month<10&&d._day>=10)
        out << d._year << "-" <<0<< d._month << "-" << d._day;
    else
        out << d._year << "-" << d._month << "-" << d._day;
    return out;
}

在主函数输入时要注意是循环输入

	for(int cur=0;cur<count;cur++)
    {
        cin>>year>>month>>day>>n;
        Date d(year,month,day);
        Date d1=d+n;
        cout<<d1<<endl;
	}

完整代码如下:

#include<iostream>
using namespace std;
class Date
{
protected:
	friend ostream& operator<<(ostream& out, const Date& d);
public:
    Date(int year,int month,int day);
    Date operator+(int n);
    int GetMonthDay(int year, int month);
private:
    int _year;
    int _month;
    int _day;
};

Date::Date(int year,int month,int day)
{
    _day=day;
    _month=month;
    _year=year;
}
ostream& operator<<(ostream& out, const Date& d)
{
    if(d._month<10&&d._day<10)
        out << d._year << "-" <<0<< d._month << "-" <<0<< d._day;
    else if(d._month>=10&&d._day<10)
        out << d._year << "-" << d._month << "-" <<0<< d._day;
    else if(d._month<10&&d._day>=10)
        out << d._year << "-" <<0<< d._month << "-" << d._day;
    else
        out << d._year << "-" << d._month << "-" << d._day;
    return out;
}
Date Date::operator+(int n)
{
	int year = _year;
	int month = _month;
	int day = _day;
	int days = GetMonthDay(year, month);

	while (day + n > days)
	{
		month++;
		if (month > 12)
		{
			year++;
			month = 1;
		}
		n -= days;
		days = GetMonthDay(year, month);
	}
	day += n;
	return Date(year, month, day);
}

int Date::GetMonthDay(int year, int month)
{
    static int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int day = days[month];
	if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)))
	{
		day += 1;
	}
	return day;
}

int main()
{
    
    int count=0;
    int year=0,month=0,day=0;
    int n=0;
     cin>>count;
    for(int cur=0;cur<count;cur++)
    {
        cin>>year>>month>>day>>n;
        Date d(year,month,day);
        Date d1=d+n;
        cout<<d1<<endl;
}

    
    return 0;
}
全部评论
一看就是比特的
2 回复 分享
发布于 2024-02-20 17:17 河南
我嘞个小比特啊
1 回复 分享
发布于 2024-11-15 16:55 湖北

相关推荐

评论
8
1
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10999次浏览 94人参与
# 你的实习产出是真实的还是包装的? #
1943次浏览 42人参与
# 巨人网络春招 #
11361次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7628次浏览 43人参与
# 简历第一个项目做什么 #
31736次浏览 339人参与
# 重来一次,我还会选择这个专业吗 #
433536次浏览 3926人参与
# 米连集团26产品管培生项目 #
6027次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187191次浏览 1122人参与
# 牛客AI文生图 #
21445次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152441次浏览 888人参与
# 研究所笔面经互助 #
118960次浏览 577人参与
# 简历中的项目经历要怎么写? #
310349次浏览 4217人参与
# AI时代,哪些岗位最容易被淘汰 #
63803次浏览 826人参与
# 面试紧张时你会有什么表现? #
30509次浏览 188人参与
# 你今年的平均薪资是多少? #
213128次浏览 1039人参与
# 你怎么看待AI面试 #
180122次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64331次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76537次浏览 374人参与
# 我的求职精神状态 #
448121次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363503次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160672次浏览 1112人参与
# 校招笔试 #
471140次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务