我们经常要计算,从今天往后N天之后是哪一天(哪年哪月哪日)。现在我们就可以编写一个程序,推算指定日期之后的第N天是什么日期。
输入:
年 月 日
N
输出:
(年月日+N天后的)年.月.日
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
|
以文本方式显示
|
无限制 | 64M | 0 |
测试用例 2 | 以文本方式显示
|
以文本方式显示
|
无限制 | 64M | 0 |
代码仅供参考:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
#include <stdbool.h>
int common_year(int year);
int main()
{
int month[2][12] = { { 31,28,31,30,31,30,31,31,30,31,30,31 },{31,29,31,30,31,30,31,31,30,31,30,31} };
// the first is common,the second is leap
int n=0;
int year, mon, day;
if(4==scanf("\n%d %d %d %d",&year,&mon,&day,&n))
{
//判断输入合法
bool commonyear = false;
commonyear = common_year(year);
if (n < 0 || mon>12 || mon < 1 || day < 1) return 0;
if (commonyear) {
if (month[0][mon - 1] < day) return 0;
}
else {
if (month[0][mon - 1] < day) return 0;
}
//思路就是根据天数求后续日期
printf("%d.%d.%d,n = %d\n", year, mon, day,n);
n += day;
mon--;
//printf("n = %d\n", n);
R:
commonyear = common_year(year);
if (commonyear) {
while (n > month[0][mon]) {
n -= month[0][mon];
mon++;
//printf("n = %d, mon = %d\n", n,mon);
if (mon == 12 && n > month[0][0]) {
mon = 0;
year++;
goto R;
}
}
}
else {
while (n > month[1][mon]) {
n -= month[1][mon];
mon++;
//printf("n = %d, mon = %d\n", n, mon);
if (mon == 12 && n > month[1][0]) {
mon = 0;
year++;
goto R;
}
}
}
day = n;
printf("%d.%d.%d\n", year, ++mon, day);
}
return 0;
}
int common_year(int year)
{
int ret = 1;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
ret = 0;
return ret;
}
标签:后续,int,31,month,日期,mon,计算,year,day From: https://www.cnblogs.com/alien-han/p/16887895.html