15-1 改错题
输入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
信息
- 难度
- 9
- 分类
- (无)
- 标签
- 递交数
- 36
- 已通过
- 3
- 通过率
- 8%
- 被复制
- 4
- 上传者