求求哪位大佬解释一下程序中12个月为什么要定义13个数据

这段代码用于计算两个日期之间的天数,包括闰年的处理。有趣的是,程序中定义了一个13个月的数组,实际上常规年份只有12个月。这是因为为了简化闰年2月的判断,将2月视为第13个月,当需要考虑2月的额外一天时,可以直接累加,简化了闰年的处理逻辑。
摘要由CSDN通过智能技术生成

#include
using namespace std;
bool isLeap(int x)
{
if((x % 4 == 0 && x % 100 != 0 )‖x % 400 == 0)
{ return true;
}
else
return false;
}
int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main()
{
int startYear, startMonth, startDay;
int endYear, endMonth, endDay;
cout<<“请输入正确的开始年、月、日,中间用空格键隔开:”;
cin >> startYear >> startMonth >> startDay; cout<<“请输入正确的结束年、月、日,中间用空格键隔开:”;
cin >> endYear >> endMonth >> endDay; int ans=0;
if(startYear == endYear) //如果是同一年
{
if(startMonth == endMonth)
{
ans = endDay - startDay;
}
else
{
for(int i = startMonth + 1; i < endMonth; i ++)
{
ans += month[i]; }
ans += month[startMonth] - startDay + endDay; if(isLeap(startYear)) //如果是闰年
{ if(startMonth <= 2 && endMonth > 2) //判断起止月是否包含2月
{
ans += 1;
}
}
}
}
else
{ //计算两个年份之间年份的总天数
for(int i = startYear + 1; i < endYear; i ++)
{
ans += 365;
if(isLeap(i))
ans += 1;
} //计算起始年份的总天数
for(int i = startMonth + 1; i <= 12; i ++)
{
ans += month[i];
}
ans += month[startMonth] - startDay; //特殊判断起始月份如果在2月之前(包括2月),在闰年的情况下,天数需要加1 if(isLeap(startYear))
{
if(startMonth <= 2)
{
ans += 1;
}
} //计算终止年份的天数
for(int i = 1; i < endMonth; i ++)
{
ans += month[i];
}
ans += endDay; //特殊判断终止月份如果在2月之后(不包括2月),在闰年的情况下,天数需要加1
if(isLeap(endYear))
{
if(endMonth > 2)
{
ans += 1;
}
}
}
cout <<ans <<endl;
system(“pause”);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值