/ / 题库 /

15-1 改错题

15-1 改错题

测试数据来自 nnu_contest/5c651810f41362044c5700c5

输入2个正确日期且年份在1900-9999范围内,计算并输出2个日期之间间隔的天数。
例如:2008-8-1和2009-8-1之间间隔的天数为365。
提示:能被4整除并且不能被100整除或者能被400整除的年份是闰年,其他年份是平年。
【含有错误的源程序】
#include <stdio.h>
#define leap(int y) ((y)%4==0 && (y)%100!=0 || (y)%400==0)
struct d
{ int y,m,d; };
int days(struct d d1,struct d d2)
{
int mon[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int i, td=0;
for(i=d1.y; i<d2.y; i++)
td=leap(i)?366:365;
for(i=1; i<d1.m; i++)
td-=mon[leap(d1.y)][i];
td-=d1.d-1;
for(i=1;i<d2.m;i++)
td+=mon[leap(d2.y)][i];
td+=d2.d-1;
return td;
}
int main()
{
struct d1,d2;
scanf("%d-%d-%d", &d1.y,&d1.m,&d1.d);
scanf("%d-%d-%d", &d2.y,&d2.m,&d2.d);
printf("%d days",days(d1.y,d2.y));
return 0;
}

测试案例:
输入:

1980-2-1
2009-8-1

输出:

10774 days

信息

ID
1318
难度
(无)
分类
(无)
标签
递交数
0
已通过
0
通过率
?
上传者