問題 E: 日期累加
時間限制 : 1.000 sec 內存限制 : 32 MB
解決 : 686 提交 : 1281題目描述
設計一個程序能計算一個日期加上若干天后是什麼日期。
輸入
輸入第一行表示樣例個數m,接下來m行每行四個整數分別表示年月日和累加的天數。
輸出
輸出m行,每行按yyyy-mm-dd的個數輸出。
樣例輸入
1 2008 2 3 100樣例輸出
2008-05-13
可以看看這篇文章:【純乾貨】超全! 計算天數、計算星期幾等日期問題 一文燉!
此題就是在codeup 2026 | 日期類這題上改一點點...
思路很簡單:從輸入的日期開始往後推n天即可。
注意:需要用conut記錄往後推了幾天,在每後推一天時,count++,直到達到n。
就不細說啦,具體代碼如下:
//
// Created by LittleCat on 2020/2/2.
//
#include <cstdio>
/* 平年和閏年每個月的天數 */
int month[13][2] = {
{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30},
{31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}
};
/* 判斷y年是否爲閏年
* 是 則返回1 ; 否 則返回0 */
int isLeapYear(int y) {
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
return 1;
return 0;
}
int main() {
int n;
while (EOF != scanf("%d\n", &n)) {
int y, m, d, days;
for (; n; n--) {
scanf("%d %d %d %d", &y, &m, &d, &days);
int count = 0;
while (count < days) {
d++; //天數進1
/* 當月天數已滿 */
if(d == month[m][isLeapYear(y)] + 1) {
d = 1;
m++;
}
/* 月份數已滿 */
if(m == 13) {
y++;
m = 1;
}
count++;
}
printf("%04d-%02d-%02d\n", y, m, d);
}
}
}
end
歡迎關注個人公衆號“ 雞翅編程 ”,這裏是認真且乖巧的碼農一枚。
---- 做最乖巧的博客er,做最紮實的程序員 ----
旨在用心寫好每一篇文章,平常會把筆記彙總成推送更新~