题目:用一个8位正整数表示日期,其中前4位表示年,中间2位表示月,最后2位表示日。
例如:20170901表示2017年9月1日
20200510表示2020年5月10日
程序计算两个日期之间的天数。
程序运行结果为:
20170901-20200510共有983天
代码如下:
#include <stdio.h>
static int valid_date(int date)
{
int year,month,day;
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //1到12月的天数
year=date/10000;
month=date/100%100;
day=date%100;
if(month>12)
return 2; //如果月份大于一年,输出2
mon[1]+=(year%4==0 && year%100!=0 || year%400==0);
return day>mon[month-1]; //如果天数大于当月,输出1
}
int validm()
{
int first=20170901,last=20200510;
int year,month,day,val,days;
days=0;
year=first/10000;
month=first/100%100;
day=first%100;
days++;
for(val=first;val<last;val=year*10000+month*100+day)
{
if(valid_date(val)==2) //如果月份大于年份,年份进一位,并重置月份
{
year++;
month=1;
}
else if(valid_date(val)==1) //如果天数大于月份,月份进一位,并重置天数
{
month++;
day=1;
}
else //其余正常情况,天数加1
{
day++;
days++;
}
}
printf("%u-%u共有%d天\n",first,last,days);
getchar();
return 0;
}