牛客网KY258 日期累加

题目

描述:

设计一个程序能计算一个日期加上若干天后是什么日期。

输入描述:

输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

输出描述:

输出m行,每行按yyyy-mm-dd的个数输出。

题解

直接简单的思路:首先累加的天数(days)减去当前月份剩余天数(monthsmonth-day),若差值小于零,则月份不变,日期(day)加上累加天数(days)即所求日期;若插值大于零,则月份(month)加一,用差值减去该月份天数,不断循环,直到差值小于零跳出循环,差值加上当前月份天数即为所求日期。需要注意的是,循环过程中月份可能会大于12,此时年份(year)需要加一,并且月份重置为1;年份变化时,还需要再次判断是否为闰年,若为闰年二月份天数改为29,否则改为28(如果没有改为28,当年份为闰年且加上若干天后变为平年时,在进入循环之前二月份天数被改为29,在while循环体内判断为平年,此时二月份天数仍为29,是错误的)。

复制代码
#include <stdio.h>

int main()
{
    int m = 0;
    scanf("%d\n",&m);
    int year = 0,month = 0,day = 0,days = 0;
    int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    while(scanf("%d %d %d %d\n",&year,&month,&day,&days) != EOF)
    {
        if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
            months[2] = 29;
        days -= months[month] - day;
        while(days > 0)
        {
            month++;
            if(month > 12)
            {
                year++;
                month = 1;
            }
            if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
            {
                months[2] = 29;
            }
            else
            {
                months[2] = 28;
            }
            days -= months[month];
        }
        day = months[month] + days;
        
        printf("%d-%02d-%02d\n",year,month,day);
    }
    return 0;
}

另一种思路:通过给定的年、月、日算出这一天是该年的第几天,然后将该天数加上给定的数值,反向求解,得出年、月、日。

相关推荐
apcipot_rain16 分钟前
计科八股20260606——二叉树、PCA、图深度学习、进程上下文、C语言预编译、文件读写、单精度浮点数
c语言·数据结构·算法·pca·图神经网络
你怎么知道我是队长17 分钟前
CRC校验介绍
c语言
189228048611 小时前
NV077固态MT29F16T08ESLCHL6-QAES:C
c语言·开发语言·性能优化
是阿建吖!10 小时前
【Linux】信号
android·linux·c语言·c++
三品吉他手会点灯11 小时前
C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍
c语言·笔记·学习·算法
wuminyu13 小时前
Java锁机制之轻量级锁判断与尝试逻辑源码剖析
java·linux·c语言·jvm·c++
老H科研技术16 小时前
第 01 篇:MCP 概念与架构 —— AI 世界的“USB-C“
c语言·人工智能·chatgpt·架构·aigc·agi
社交怪人17 小时前
【判断奇偶】信息学奥赛一本通C语言解法(题号1041)
c语言
Jun62618 小时前
QT(1)-C/C++库生成和调用
c语言·开发语言·c++·qt
努力努力再努力wz19 小时前
【Qt入门系列】一文掌握 Qt 常用显示类控件:QLCDNumber、QProgressBar 与 QCalendarWidget
c语言·开发语言·数据结构·数据库·c++·git·qt