1.根据题目我们知道,这道题主要就是对特殊情况的考察。题本身考察的知识很常规,但是一些特殊情况可能会没有考虑到,导致运行错误。
2.这道题另外一个值得注意的是定义年份year要用long long ,因为year的数字可能会比较大,如果用int的话,当year较大,运行结果会出现乱码。
#include<stdio.h> //第二日问题
int main()
{
int m, d;
long long y; //定义y用long long 避免y过大出现乱码
while (scanf("%lld",&y),y!=0) //输入0为循环结束的条件
{
scanf("%d%d", &m, &d);
if (m == 12 && d == 31) //特殊日期12-31
{
y++; m = 1; d = 1;
}
else if (m == 2 && (d == 28 || d == 29)) //特殊日期2-28or2-29
{
if (((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0))) && d == 29) //闰年2-29
{
m++; d = 1;
}
else if (((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0))) && d == 28) //闰年2-28
{
d++;
}
else //平年2-28
{
m++; d = 1;
}
}
else if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && d == 31) //31天的月份
{
m++; d = 1;
}
else if ((m == 4 || m == 6 || m == 9 || m == 11) && d == 30) //30天的月份
{
m++; d = 1;
}
else
{
d++;
}
printf("%lld %d %d\n", y, m, d);
}
return 0;
}