解题思路:或许会比较简单粗暴。直接先分别计算两个日期从取值范围中最小的日期到这一天的天数,再进行做差,便得出结果。(本人为大一新生,初学者,可能在尝试编写题解时,出现不足和错误,希望得到您的谅解,谢谢。)
注意事项:原本觉得计算量可能比较大,后尝试发现可行,希望和同学们分享一下。以下为我曾犯过的错误:1.闰年的判断逻辑错误。闰年是能被 4 整除,但不能被 100 整除的年份,或者能被 400 整除的年份; 2.注意for循环语句中,继续循环的条件是否需要-1; 3.调用函数时应对数据定义类型。
参考代码:
#include<stdio.h>
int fun(int year,int month,int day)
{
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i;
long long int sum;
sum=0;
for(i=1;i<year;i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
sum+=366;
else sum+=365;
}//先算该年之前的总天数
if((year%4==0&&year%100!=0)||(year%400==0))
c[1]=29;
for(i=0;i<month-1;i++)
sum+=c[i];//再算该年此月之前的总天数
sum+=day;//最后再加上日数即可
return sum;
}
int main()
{
int startYear,startMonth,startDay,endYear,endMonth,endDay;
scanf("%d %d %d\n%d %d %d",&startYear,&startMonth,&startDay,&endYear,&endMonth,&endDay);
long long int differ,d1,d2;
d1=fun(startYear,startMonth,startDay);
d2=fun(endYear,endMonth,endDay);//分别计算从1年1月1日到这一天的总天数
differ=d2-d1;
printf("%lld",differ);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复