闰年的判断公式: 年份能被4整除但不能被100整除 或者 能被400整除。
解法一:
直接判断是否为闰年,再根据是否为闰年进行判断,造成了重复
#include <stdio.h>
int main()
{
int a, b;
scanf_s("%d.%d", &a, &b);//a为年份,b为月份,年份和月份输入时按2023.3格式(年份.月份)
if ((a % 4 ==0 && a % 100 != 0)||a % 400 ==0)//判断是否为闰年
{
if (b == 2)//闰年2月29天
{
printf("%d年%d月有29天", a, b);
}
else if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12)
{
printf("%d年%d月有31天",a, b);
}
else {
printf("%d年%d月有30天", a, b);
}
}
else
{
if (b == 2)//平年2月28天
{
printf("%d年%d月有28天", a, b);
}
else if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12)
{
printf("%d年%d月有31天", a, b);
}
else {
printf("%d年%d月有30天", a, b);
}
}
return 0;
}
解法二(更优解):
采用switch解法能减少冗余度,只对是否为闰年不同的2月进行特殊判断
#include <stdio.h>
int main()
{
int a, b;
scanf_s("%d.%d", &a, &b);//a为年份,b为月份,年份和月份输入时按2023.3格式(年份.月份)
switch (b)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("31天\n");
break;
case 2:
if (a%4==0&&a%100!=0
||a%400==0)
{
printf("29天\n");
}
else
{
printf("28天\n");
}
break;
default:
printf("30天\n");
break;
}
return 0;
}