描述
输入年份和月份,输出该月份的天数
方法1
#include <stdio.h>
#include <stdbool.h>
bool is_leap_year(int year)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
return true;
}
else
{
return false;
}
}
int get_days_of_month(int year, int month)
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12
int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 29 <---闰年
int day = days[month];
is_leap_year(year);
if (is_leap_year(year) && month == 2)
{
day += 1;
}
return day;
}
int main()
{
int year = 0;
int month = 0;
scanf("%d %d", &year, &month);
int n = get_days_of_month(year, month);
printf("%d\n", n);
return 0;
}
第19行将数组days中的第一个元素设置为0,其用意是将天数向后挤一下,这种巧妙的设计可以使得数组元素的下标刚好与月份相对应,一月的天数就是数组中下标为1的元素。
方法2
#include <stdio.h>
#include <stdbool.h>
int is_leap_year(int year)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
return 1;
}
else
{
return 0;
}
}
int get_days_of_month(int year, int month)
{
// 0 1 2 3 4 5 6 7 8 9 10 11
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 29 <---闰年
is_leap_year(year);
if (is_leap_year(year) && month == 2)
{
days[2 - 1] += 1;
}
return days[month - 1];
}
int main()
{
int year = 0;
int month = 0;
scanf("%d %d", &year, &month);
int n = get_days_of_month(year, month);
printf("%d\n", n);
return 0;
}
第8行用数字1代表闰年
第12行用数字0代表非闰年
第24行二月的天数所对应的数组元素的下标为1