总时间限制: 1000ms 内存限制: 65536kB
描述
甲壳虫的《A day in the life》和《Tomorrow never knows》脍炙人口,如果告诉你 a day in the life, 真的会是 tomorrow never knows? 相信学了计概之后这个不会是难题,现在就来实现吧。
读入一个格式为 yyyy-mm-dd 的日期(即年-月-日),输出这个日期下一天的日期。可以假定输入的日期不早于 1600-01-01,也不晚于 2999-12-30。
输入
输入仅一行,格式为 yyyy-mm-dd 的日期。
输出
输出也仅一行,格式为 yyyy-mm-dd 的日期
样例输入
样例输出
提示
闰年的标准:
- 普通年能被 4 整除且不能被 100 整除的为闰年。(如 2004 年就是闰年,1901 年不是闰年)
地球公转示意图
- 世纪年能被 400 整除的是闰年。(如 2000 年是闰年,1100 年不是闰年)
- 输入语句 scanf (“% d-% d-% d”,&y,&m,&d) 可以存储年,月,日.输出语句格式类似 printf (“% d-%02d-%02d\n”,year,month,day).
思路
方法一
由题可知,输入一个日期,输出明天的日期。
其中,这将涉及到年、月、日的修改。
首先,将输入的日期的日数加一,然后判断是否需要修改月份,再判断是否需要修改年份。
这里要注意闰年的判断。
如果是闰年,2 月份有 29 天,否则有 28 天。
1、3、5、7、8、10、12 月份有 31 天,其他月份有 30 天。
值得注意的是,如果是闰年且为 2 月份,且日期为 28 号,那么明天就是 29 号。
还有一个点,就是输入的日期中,月份和日期都是负数,所以要将其转换为正数。(这是在 C++ 中的特殊情况)
我的测试用例
用例 1
输入
输出
用例 2
输入
输出
用例 3
输入
输出
用例 4
输入
输出
用例 5
输入
输出
用例 6
输入
输出
用例 7
输入
输出
Code
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <stdio.h>
typedef struct date { int year; int month; int day; } date;
int main() { date input; scanf("%d-%d-%d", &input.year, &input.month, &input.day); input.day++; if((input.day > 29) && (input.month == 2) && ((input.year % 4 == 0 && input.year % 100 != 0) || input.year % 400 == 0)) { input.day = 1; input.month++; } else if((input.day > 28) && (input.month == 2) && ((input.year % 4 == 0 && input.year % 100 != 0) || input.year % 400 == 0)); else if(((input.year % 4 != 0 && input.year % 400 != 0) || input.year % 100 == 0) && input.month == 2 && input.day > 28) { input.day = 1; input.month++; } else if((input.month == 1 || input.month == 3 || input.month == 5 || input.month == 7 || input.month == 8 || input.month == 10) && input.month != 12 && input.day > 31) { input.day = 1; input.month++; } else if((input.month == 2 || input.month == 4 || input.month == 6 || input.month == 9 || input.month == 11) && input.month != 12 && input.day > 30) { input.day = 1; input.month++; } else if(input.month == 12 && input.day > 31) { input.day = 1; input.month = 1; input.year++; } printf("%d-%02d-%02d", input.year, input.month, input.day); }
|
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <bits/stdc++.h> using namespace std;
typedef struct date { int year; int month; int day; } date;
int main() { date input; cin >> input.year >> input.month >> input.day; input.day *= -1; input.day++; input.month *= -1; if((input.day > 29) && (input.month == 2) && ((input.year % 4 == 0 && input.year % 100 != 0) || input.year % 400 == 0)) { input.day = 1; input.month++; } else if((input.day > 28) && (input.month == 2) && ((input.year % 4 == 0 && input.year % 100 != 0) || input.year % 400 == 0)); else if(((input.year % 4 != 0 && input.year % 400 != 0) || input.year % 100 == 0) && input.month == 2 && input.day > 28) { input.day = 1; input.month++; } else if((input.month == 1 || input.month == 3 || input.month == 5 || input.month == 7 || input.month == 8 || input.month == 10) && input.month != 12 && input.day > 31) { input.day = 1; input.month++; } else if((input.month == 2 || input.month == 4 || input.month == 6 || input.month == 9 || input.month == 11) && input.month != 12 && input.day > 30) { input.day = 1; input.month++; } else if(input.month == 12 && input.day > 31) { input.day = 1; input.month = 1; input.year++; } cout << input.year << "-"; if(input.month < 10) cout << "0" << input.month; else cout << input.month; if(input.day < 10) cout << "-" << "0" << input.day; else cout << "-" << input.day; }
|