两个日期之间相差的天数——C语言实现

本文详细解析了如何编写代码解决一个涉及闰年判断的编程问题,通过判断输入的起始年份、月份和日期与终止年份之间的天数差异,包括闰年和平年以及同月、不同月的不同处理方式。

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

前言

今天我们来看一道我个人认为很有意思的题,乍一看好像很简单,却有很多细微之处容易忽略。下面把我当时解题的思路展现出来,其实算法并不难,只是当初第一次做的时候花了我很多时间去对每一种情况进行讨论,现在看来依然望而生畏。大佬们有任何好的解法欢迎留言到评论区![doge][doge][doge]

原题复现

两个日期之间相差天数

简要分析

首先,要求小明的出生日期和现在的日期之间相差的天数,我们很容易就想到闰年和平年的问题。其次,我们还要分析输入的两个年份是同一年还是不同年,这两种情况也是不一样的。而题目的难点就在判断使是否是闰年后天数的计算上。我们易得到以下几个问题:
1、出生年是否是闰年;
2、今年是否是闰年;
3、出生年与今年之间是否相差闰年,相差几个闰年。
其次,如果是两者是同一年,我们还要考虑是否是同一月的情况。

实现过程

假设输入的起始年、月、日分别为y1、m1、d1,输入的终止年、月、日分别为y2、m2、d2。即以y1-m1-d1 y2-m2-d2的形式输入,并设总天数为D。(即要求的天数为D)

1.判断闰年函数

由于程序中有多处涉及到闰年的判断,我们先单独封装一个用来判断是否是闰年的函数。是闰年返回1,不是闰年返回0。

int prime(int n)
{
   
	if ((n % 4 == 0) && (n % 100 != 0) || (n % 400 == 0))
	{
   
		return 1;//是闰年
	}
	else
	{
   
		return 0;//不是闰年
	}
}

1.设置两个数组存放闰年和平年的每月天数

这里我们设置两个大小为13的数组,是为了方便我们后面直接将月份作为数组下标来获得数组元素,每个月份正好与数组下标相对应,这种方法非常常见。

int days1[13] = {
   0,31,28,31,30,31,30,31,31,30,31,30,31 };//平年每月天数
int days2[13] = {
   0,31,29,31,30,31,30,31,31,30,31,30,31 };//闰年每月天数

3.求y1与y2之间相差的天数

我们先不管y1、y2这两个年份的天数,先求出y1、y2之间相差的年数并判断闰年,如果是闰年,直接D+366;如果是平年,直接D+365。

for (i = y1 + 1; i < y2; i++)//先不管y1、y2这两个年份,只看两者中间的年份
{
   
	if (prime(i) == 1)//是闰年
	{
   
		D += 366;
	}
	else//是平年
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值