1.題目介紹
Time Limit: 1000 ms
Memory Limit: 256 mb
編寫一個日期類,要求按xxxx-xx-xx 的格式輸出日期,實現加一天的操作。
輸入輸出格式
輸入描述:
輸入第一行表示測試用例的個數m,接下來m行每行有3個用空格隔開的整數,分別表示年月日。測試資料不會有閏年。
輸出描述:
輸出m行。按xxxx-xx-xx的格式輸出,表示輸入日期的後一天的日期。
輸入輸出樣例
輸入樣例#:
2
1999 10 20
2001 1 31
輸出樣例#:
1999-10-21
2001-02-01
提示
注意個位數日期前面要有0。
題目來源
北京理工大學機試題
2.題解
2.1 日期計算 + 類應用
思路
注意下printf("%4d-%02d-%02d\n", year, month, day);
怎麼補0即可
程式碼
#include<bits/stdc++.h>
using namespace std;
vector<int> f{0,31,28,31,30,31,30,31,31,30,31,30,31};
void isLeapYear(int year){
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) f[2] = 29;
else f[2] = 28;
}
class Date{
public:
int year;
int month;
int day;
Date(int y, int m, int d): year(y), month(m), day(d){};
void AddDays(){
day++;
if(day > f[month]){
month++;
day = 1;
if(month == 13){
year++;
month = 1;
}
}
}
void printDate(){
printf("%4d-%02d-%02d\n", year, month, day);
}
};
int main(){
int n;
cin >> n;
for(int i = 0; i < n; i++){
int y, m, d;
cin >> y >> m >> d;
Date date(y, m, d);
isLeapYear(date.year);
date.AddDays();
date.printDate();
}
return 0;
}