规定输入格式为:
起始年 月 日 终止年 月 日
2021年1月1日-2021年1月2日为经过两天
#include <stdio.h>
#include <stdlib.h>
int sum=0;
int monthp[13];
int monthr[13];//r是闰年,p是平年
int leap(int i)
{
int flag=0;
if((i%4==0&&i%100!=0)||i%400==0)
flag=1;
return flag;
}
void year_start(int year1, int month1, int day1)
{
if(leap(year1))
{
sum=monthr[month1]-day1+1;
for(int i=month1+1;i<=12;i++)
{
sum+=monthr[i];
}
}
else
{
sum=monthp[month1]-day1+1;
for(int i=month1+1;i<=12;i++)
{
sum+=monthp[i];
}
}
}
void year_middle(int year1,int year2)
{
for(int i=year1+1;i<=year2-1;i++)
{
if(leap(i))
sum+=366;
else
sum+=365;
}
}
void year_end(int year2, int month2, int day2)
{
if(leap(year2))
{
for(int i=1;i<=month2-1;i++)
{
sum+=monthr[i];
}
}
else
{
for(int i=1;i<=month2-1;i++)
{
sum+=monthp[i];
}
}
sum+=day2;
}
void month_start(int year1,int month1,int day1,int month2,int day2)
{
if(leap(year1))
{
sum=monthr[month1]-day1+1;
}
else
{
sum=monthp[month1]-day1+1;
}
}
void month_middle(int year1,int month1,int day1,int month2,int day2)
{
if(leap(year1))
{
for(int i=month1+1;i<=month2-1;i++)
{
sum+=monthr[i];
}
}
else
{
for(int i=month1+1;i<=month2-1;i++)
{
sum+=monthp[i];
}
}
}
void month_end(int day2)
{
sum+=day2;
}
int main()
{
for(int i=1;i<=7;i+=2)
monthp[i]=31;
for(int i=8;i<=12;i+=2)
monthp[i]=31;
for(int i=1;i<=7;i+=2)
monthr[i]=31;
for(int i=8;i<=12;i+=2)
monthr[i]=31;
for(int i=4;i<=6;i+=2)
monthp[i]=30;
for(int i=9;i<=11;i+=2)
monthp[i]=30;
monthp[2]=28;
for(int i=4;i<=6;i+=2)
monthr[i]=30;
for(int i=9;i<=11;i+=2)
monthr[i]=30;
monthr[2]=29;
int year1,month1,day1;
int year2,month2,day2;
scanf("%d %d %d",&year1,&month1,&day1);
scanf("%d %d %d",&year2,&month2,&day2);
;
if(!(year1==year2))
{
year_start(year1,month1,day1);
if((year2-year1)>1)
year_middle(year1,year2);
year_end(year2,month2,day2);
}
else if(!(month1==month2))
{
month_start(year1,month1,day1,month2,day2);
month_middle(year1,month1,day1,month2,day2);
month_end(day2);
}
else
{
sum+=day2-day1+1;
}
printf("%d\n",sum);
system("pause");
return 0;
}
结果展示:
2000 1月 1日至2021 10月15日 经过天数为7959天