在完成此题之前需要先掌握一个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
- 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
- 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;
- }