解题思路:不需要什么思路,就是算天数,关键把握好几个小点。
- 闰年问题
- 相同年份处理,不同年份处理
- 起始年份当月剩余天数,截止年份所含天数
#include<stdio.h>
#define bool char
#define True 1
#define False 0
int cal(int year1,int month1, int day1,int year2, int month2, int day2);
int leapyear[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int normalyear[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int year1,month1,day1,year2,month2,day2;
int result;
printf("请输入起始年月日:");
scanf("%d%d%d",&year1,&month1,&day1);
printf("请输入截止年月日:");
scanf("%d%d%d",&year2,&month2,&day2);
result = cal(year1,month1,day1,year2,month2,day2);
printf("%d",result);
}
bool is_LeapYear(int year)
{
if(year%4==0 || (year%400==0 && year%100!=0))
return True;
else
return False;
}
int cal(int year1,int month1, int day1,int year2, int month2, int day2)
{
int result=0,i;
//不同年份
if(year1 != year2)
{
//计算相差的整年天数
for(i=year1+1; i<year2; i++)
{
if(is_LeapYear(i))
result += 366;
else
result += 365;
}
//计算起始年份本年的剩余天数
if(is_LeapYear(year1))
{
for(i=month1;i<12;i++)
{
result += leapyear[i];
}
result += (leapyear[month1-1]-day1);
}
else
{
for(i=month1;i<12;i++)
{
result += normalyear[i];
}
result += (normalyear[month1-1]);
}
//计算截止年份所包含的天数
if(is_LeapYear(year2))
{
for(i=0; i<month2-1; i++)
{
result += leapyear[i];
}
result += day2;
}
else
{
for(i=0; i<month2-1; i++)
{
result += normalyear[i];
}
result += day2;
}
}
//年份相同
else
{
if(is_LeapYear(year1))
{
if(month1 == month2)
{
result = (day2 - day1);
}
else
{
for(i=month1;i<month2-1;i++)
result += leapyear[i];
result += day2;
result += (leapyear[month1-1]-day1);
}
}
else
{
if(month1 == month2)
{
result = (day2 - day1);
}
else
{
for(i=month1;i<month2-1;i++)
result += normalyear[i];
result += day2;
result += (normalyear[month1-1]-day1);
}
}
}
return result;
}
注意:不完善之处挺多,如对于输入错误的日期没有判定等。