#include<cstdio>
int month[13][2] = { // 平年和闰年每个月的天数
{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}
};
bool isLeap(int year) { // 判断是否是闰年
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
int time1, y1, m1, d1;
int time2, y2, m2, d2;
while(scanf("%d%d", &time1, &time2) != EOF) {
if(time1 > time2) { // 第一个日期晚于第二个日期,则交换
int temp = time1;
time1 = time2;
time2 = temp;
}
y1 = time1 / 10000, m1 = time1 %10000 / 100, d1 = time1 % 100;
y2 = time2 / 10000, m2 = time2 %10000 / 100, d2 = time2 % 100;
int ans = 1; // 记录结果
// 第一个日期没有达到第二个日期时进行循环
while(y1 < y2 || m1 < m2 || d1 < d2) {
d1++;
if(d1 == month[m1][isLeap(y1) + 1]) { // 满当月天数
m1++;
d1 = 1;
}
if(m1 == 13) { // 月份满12个月
y1++;
m1 = 1;
}
ans++;
}
printf("%d\n", ans);
}
return 0;
}
法二
#include<cstdio>
int isInYear(int year); //判断是否为闰年 是闰年返回0 否则返回1
int daysInMonth(int year,int month);
int daysNum(int year,int month);
int months[13] = { // 平年和闰年每个月的天数
0,31,0,31,30,31,30,31,31,30,31,30,31
};
int main(){
int time1=0,time2=0,sum=0;
while(scanf("%d%d",&time1,&time2) != EOF){
if(time1 > time2){
int temp=time1;
time1=time2;
time2=temp;
}
for(int i=time1/10000;i<time2/10000;i++)
{
sum+=(366-isInYear(i));
}
sum=sum-daysNum(time1/10000,time1%10000/100)+daysNum(time2/10000,time2%10000/100)-time1%100+time2%100;
printf("%d\n",sum+1);
}
}
int daysNum(int year,int month){
int sum=0;
for(int i=1;i<month;i++){
sum+=daysInMonth(year,i);
}
return sum;
}
int isInYear(int year)
{
return ((year%4)&&(!(year%100))||(year%400));
}
int daysInMonth(int year,int month)
{
if(month==2)return (29-isInYear(year));
else return months[month];
}