首页 > 其他分享 >【日期】计算后续日期

【日期】计算后续日期

时间:2022-11-14 07:44:05浏览次数:64  
标签:后续 int 31 month 日期 mon 计算 year day

我们经常要计算,从今天往后N天之后是哪一天(哪年哪月哪日)。现在我们就可以编写一个程序,推算指定日期之后的第N天是什么日期。

输入:
  年 月 日
  N

输出:
(年月日+N天后的)年.月.日

  测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1 以文本方式显示
  1. 2012 4 9↵
  2. 91↵
以文本方式显示
  1. 2012.7.9↵
无限制 64M 0
测试用例 2 以文本方式显示
  1. 2013 1 1↵
  2. 364↵
以文本方式显示
  1. 2013.12.31↵
无限制 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

相关文章