解题思路:
代码整体逻辑为,利用子代码判断年份是否闰年,和判断闰平一年的天数,接着先算结束日期在结束年份中的天数(day2),再计算起始日期在起始年份中的天数(day1),然后再根据其年份之间的差值,加上n个365(或366),n为年与年的差值。计算差值天数关系式:days=day2+365(或366)n+day1。
注意事项:可先看主函数的代码一步步慢慢理解
参考代码:
#include<stdio.h>
int leapyear(int year)//判断给定的年份是否为闰年。
{//能被4整除且不能被100整除,或者能被400整除,则该年就是闰年。
return (year%4==0&&year%100!=0)||(year%400==0); //函数返回1表示闰年,返回0表示平年。
}
//该函数用于计算从给定年份的1月1日到指定月份和日期的天数总和。
int daycha(int year,int month,int day)
{
int sum=0;
//二维数组a来存储平年和闰年每个月的天数。
int a[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};//闰年
for(int i=0;i<month-1;i++) //循环累加从1月到指定月份前一个月的天数,然后加上当前月的天数day。
{
sum=sum+a[leapyear(year)][i];
}
sum+=day;
return sum;
}
//该函数用于计算两个日期之间相差的天数.
int datecha(int startYear,int startMonth,int startDay,int endYear,int endMonth,int endDay)
{
int day1=0,day2=0,days=0;
day1=daycha(startYear,12,31)-daycha(startYear,startMonth,startDay); //计算此日期一直到明年的天数
day2=daycha(endYear, endMonth, endDay); //计算此日期在该年中的天数
days=day1+day2; //据days=day2+365(366)n+day1关系式,可先算day2+day1,再通过循环添加年份天数
for(int i=startYear+1;i<endYear;i++)
{
if(leapyear(i)==1)
days+=366; //添加年份天数,闰年+366
else
days+=365; //平年+365
}
return days;
}
int main()
{
int startYear, startMonth, startDay;
int endYear, endMonth, endDay;
scanf("%d %d %d", &startYear, &startMonth, &startDay);//输入起始日期
scanf("%d %d %d", &endYear, &endMonth, &endDay);//输入结束日期
int days=datecha(startYear,startMonth,startDay,endYear,endMonth,endDay);
printf("%d\n",days);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复