标题
日期计算
类别
流程控制
时间限制
1S
内存限制
256Kb
问题描述
给定一个年份y和一个整数d,问这一年的第d天是几月几日?
注意闰年的2月有29天,且满足下面条件之一的是闰年:
1) 年份是4的整数倍,而且不是100的整数倍;
2) 年份是400的整数倍
输入说明
输入包含两个整数y和d,y表示年份,年份在1900到2018之间(包含1900和2018)。
d表示这一年的第几天,d在1至365之间。
输出说明
在一行输出两个整数,分别表示答案的月份和日期。
输入样例
2015 80
输出样例
3 21
#include <stdio.h>
int main()
{ int y,d,m,r;
scanf("%d %d",&y,&d);
if((y%4==0&&y%100!=0)||y==2000)
{ if(d<=31)
{ m=1;
r=d;
}
else if(d>31&&d<=60)
{ m=2;
r=d-31;
}
else if(d>60&&d<=91)
{ m=3;
r=d-60;
}
else if(d>91&&d<=121)
{ m=4;
r=d-91;
}
else if(d>121&&d<=152)
{ m=5;
r=d-121;
}
else if(d>152&&d<=182)
{ m=6;
r=d-152;
}
else if(d>182&&d<=213)
{ m=7;
r=d-182;
}
else if(d>213&&d<=244)
{ m=8;
r=d-213;
}
else if(d>244&&d<=274)
{ m=9;
r=d-244;
}
else if(d>274&&d<=305)
{ m=10;
r=d-274;
}
else if(d>305&&d<=335)
{ m=11;
r=d-305;
}
else
{ m=12;
r=d-335;
}
}
else
{ if(d<=31)
{ m=1;
r=d;
}
else if(d>31&&d<=59)
{ m=2;
r=d-31;
}
else if(d>59&&d<=90)
{ m=3;
r=d-59;
}
else if(d>90&&d<=120)
{ m=4;
r=d-90;
}
else if(d>120&&d<=151)
{ m=5;
r=d-120;
}
else if(d>151&&d<=181)
{ m=6;
r=d-151;
}
else if(d>181&&d<=212)
{ m=7;
r=d-181;
}
else if(d>212&&d<=243)
{ m=8;
r=d-212;
}
else if(d>243&&d<=273)
{ m=9;
r=d-243;
}
else if(d>273&&d<=304)
{ m=10;
r=d-273;
}
else if(d>304&&d<=334)
{ m=11;
r=d-304;
}
else
{ m=12;
r=d-334;
}
}
printf("%d %d",m,r);
}
水平有限,代码有点长
做该题的过程中出现了错误,看了几次才发现错误
原来是我在判断闰年的地方发生错误
源代码:if(y%d==0||y==2000)
(该判断错误在,也会把一些整百但又不是闰年的年份当作闰年,因为整百数也可以被4整除)
改过后:if((y%d==0&&y%100!=0)||y==2000)