3.2
闰年计算。程序输入一个正整数Y,以及另一个正整数N。计算从Y年开始后的第N个闰年是哪一年(如果Y本身是闰年,则Y之后的第一个闰年是Y)。
输入:2005 3
输出:2016
法一
#include<stdio.h>
int main()
{
int y, n;
scanf_s("%d%d", &y, &n); //%d%d默认了两个整数之间有空格
for (y; n > 0; y++) //此法相较法二避免了分类讨论
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
n--;
}
printf("%d", y-1); //之所以是输出y-1,是因为当n减到1并且此时y对应的是闰年,n会--,但此时y++仍会执行;要是不减1而输出y,得到的结果每次都是正确结果+1的年份
system("pause");
return 0;
}
法二
#include<stdio.h>
int main()
{
int Y, N, R;
scanf("%d %d", &Y, &N);
if (Y % 400 == 0 || (Y % 100 != 0 && Y % 4 == 0)) //当Y是闰年(2000,2004)
{
R = Y + (N - 1) * 4;
}
else
{
if (Y % 100 == 0 && Y % 400 != 0) //当Y不是闰年的世纪年(1900)
{
R = Y + N * 4;
}
else //当Y不是闰年也不是世纪年
R = Y - Y % 4 + N * 4; //先返回到上一个闰年再计算
}
if (R % 100 == 0 && R % 400 != 0) //检验:确保所得的年份是真正的闰年;语句功能:当R为不是闰年的世纪年(1900),排除并修正;(没有以下语句,会导致输入1896 2,输出1900,然而1900不是闰年)
{
R = R + 4;
}
printf("%d", R);
return 0;
}