【编程题】根据输入的日期,计算是这一年的第几天。输入保证年份为4位数且日期合法

该文章提供了一种解决计算机编程问题的方法,即根据输入的年月日计算出是该年的第几天。它涉及到闰年的判断和不同月份天数的累加,代码使用C语言实现,并强调了时间复杂度和空间复杂度的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、题目描述

描述

输入描述:

输出描述:

二、解题思路

三、运行代码


一、题目描述

描述

根据输入的日期,计算是这一年的第几天。

保证年份为4位数且日期合法。

进阶:时间复杂度: O(n) ,空间复杂度: O(1) 

输入描述:

输入一行,每行空格分割,分别是年,月,日

输出描述:

输出是这一年的第几天

示例:

输入:2012 12 31
输出:366
输入:1982 3 4
输出:63

二、解题思路

这道题简单解法其实将每个月的天数枚举出来,然后根据当前月份向前累加满月的天数,然后再加上当前月所在的天数。最终考虑平闰年的 2 月份区别是否增加一天。
其中需要注意的是平年和闰年的判断,而且是闰年的月份大于 2 的时候,也就是 2 月走完,总天数才能加 1 (比如 2000年2月18日 ,虽然是闰年,但是 2月 都没走完那是不能加上闰年多出的一天的).
 

三、运行代码

各位C友请看下面代码:

这道题各位只需要注意上面第二大点的解题思路,同时了解闰年的定义标准即可,其他需要注意的地方在代码里面都有注释

#include <stdio.h>
int is_leap_year(int year)
 {
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        {
            return 1;
        }
    return 0;
   } 

int main()
{
    int month_day[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int year, month, day;
    while (~scanf("%d %d %d", &year, &month, &day))
      {
        int total_day = day;//先把当前月份天数加上
        if (is_leap_year(year) && month > 2)
      { //若闰年,且月份大于2月,则在平年基础上+1
        total_day += 1;
      } 
        for (int i = month - 1; i > 0; i--) 
            {
                total_day += month_day[i];//向前累加每月的天数即可
            }
            printf("%d\n", total_day);
        } 
            return 0;
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲代码的罗根

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值