题解 | #打印日期#
打印日期
https://www.nowcoder.com/practice/b1f7a77416194fd3abd63737cdfcf82b
题目
打印日期
描述
描述:给出年分m和一年中的第n天,算出第n天是几月几号。
输入描述:输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
输出描述:可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
重点知识点
引用、打印格式、逻辑思考
引用
形参引用变量
Date(const Date& d)
{
_year=d._year;
_month=d._month;
_day=d._day;
}
返回类型引用变量
Date& GetMonth(int year,int day)
{
_month=1;
_day=day;
int Feb=28;
if(year%400==0||(year%100!=0&&year%4==0))
{
Feb=29;
}
int DayArray[13]={-1,31,Feb,31,30,31,30,31,31,30,31,30,31};
for(int i=1;_day>DayArray[i];i++)
{
_day-=DayArray[i];
_month++;
}
return *this;
}
Date& Print()
{
//cout<<_year<<'-'<<_month<<'-'<<_day<<endl; //输出时,不满10不会自动补0
printf("%04d-%02d-%02d\n",_year,_month,_day);
return *this;
}
打印格式
最开始用
cout<<_year<<'-'<<_month<<'-'<<_day<<endl;
但不满足预期输出
2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
不能在不满10时自动补0,后来改用printf,得到预期输入
printf("%04d-%02d-%02d\n",_year,_month,_day);
逻辑思考
构造函数
刚开始想创建两个参数不同的构造函数,第一个获取年和日初始化,第二个获取年、月、日初始化
但第二个构造函数的功能仅是使日期对象_month变量赋值,这一点在获取月份的函数GetMonth函数中也可以做到
日变化逻辑
刚开始用_day>0判断循环,然后实现_day-=DayArray[i],if(_day>DayArray[i])
但这样会导致_day一直减到<=0
修改后用_day>DayArray[i]判断循环,然后实现_day-=DayArray[i],if(_day>0)
代码
#include <iostream>
using namespace std;
class Date
{
public:
Date();
Date(int year,int day)
:_year(year),_day(day){}
// Date(int year,int month,int day)
// :_year(year),_month(month),_day(day){}
Date(const Date& d)
{
_year=d._year;
_month=d._month;
_day=d._day;
}
Date& GetMonth(int year,int day)
{
_month=1;
_day=day;
int Feb=28;
if(year%400==0||(year%100!=0&&year%4==0))
{
Feb=29;
}
int DayArray[13]={-1,31,Feb,31,30,31,30,31,31,30,31,30,31};
for(int i=1;_day>DayArray[i];i++)
{
_day-=DayArray[i];
_month++;
}
return *this;
}
Date& Print()
{
//cout<<_year<<'-'<<_month<<'-'<<_day<<endl; //输出时,不满10不会自动补0
printf("%04d-%02d-%02d\n",_year,_month,_day);
return *this;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
int year,day;
while(cin>>year>>day)
{
Date d(year,day);
d.GetMonth(year,day);
d.Print();
}
}
// 64 位输出请用 printf("%lld")
#牛客创作赏金赛#刷题 - 解题 文章被收录于专栏
记录遇到的题目,解题思路和相关知识点