在完成此题之前需要先掌握一个C语言小知识点:
C++中%d 和 %04d有什么区别?
%d左对齐,输出变量的所有数字;%4d右对齐,宽度为4,左边填充空格,当变量的实际宽度大于4时,输出变量的所有数字;%04d与%4d的唯一区别就是左边填充0。例如
1)以%d,%4d,%04d,输出12时, 结果是:12,两个空格12, 0012。
2)以%d,%4d,%04d,输出123时, 结果是: 123,一个空格123,0123。
3)以%d,%4d,%04d,输出1234时,结果是: 1234,1234,1234。
4)以%d,%4d,%04d,输出12345时,结果是: 12345,12345,12345。
解析代码:
#include<iostream>
using namespace std;
int GetMonthDay(int year, int month)
{
static int arr[13] = { 0, 31,28,31,30,31,30,31,31,30,31,30,31 };
int day = arr[month];
if (month == 2 && (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)))
{
day += 1;
}
return day;
}
void PrintMonthDay(int year,int dayCount)
{
int month = 1;
while (dayCount > GetMonthDay(year, month))
{
dayCount -= GetMonthDay(year, month);
month++;
if (month == 13)
{
year++;
month = 1;
}
}
printf("%04d-%02d-%02d\n", year, month, dayCount);
}
int main()
{
int year, dayCount;
while (cin >> year >> dayCount)
{
PrintMonthDay(year, dayCount);
}
return 0;
}
题二:
#include<iostream>
using namespace std;
class Date
{
public:
Date(int year,int month,int day)
:_year(year)
,_month(month)
,_day(day)
{}
int GetMonthDay(int year, int month)
{
static int arr[13] = { 0, 31,28,31,30,31,30,31,31,30,31,30,31 };
int day = arr[month];
if (month == 2 && (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)))
{
day += 1;
}
return day;
}
Date& operator+=(int day)
{
_day += day;
while (_day > GetMonthDay(_year, _month))
{
_day -= GetMonthDay(_year, _month);
_month++;
if (_month == 13)
{
_year++;
_month = 1;
}
}
return *this;
}
void Print()
{
printf("%04d-%02d-%02d\n", _year, _month, _day);
}
private:
int _year;
int _month;
int _day;
};
int main()
{
int n = 0;
int year, month, day;
int days;
cin >> n;
while (n)
{
cin >> year >> month >> day;
Date d1(year, month, day);
cin >> days;
d1 += days;
d1.Print();
n--;
}
return 0;
}