解题思路:
1、相信大家对于这题的思路和解法都很清晰, 按月遍历后相加
针对于每个月累加,如果为 1 3 5 7 8 10 12 月,每月为31天, 设置循环条件,其中12个月不用循环到,因为最后一个月用day 来表示
2、 针对平年和闰年, 的二月份 天数不同, 平年为28天 闰年为29 天。 所以必须对相关 年份进行 闰年判断。
3、其他的月份 则均为30天
#include <stdio.h>
unsigned int runnian_judge(unsigned int year) {
if (year%400 ==0) {
return 1;
} else if ((year%4 ==0) && (year%100 != 0)) {
return 1;
} else {
return 0;
}
}
int main(void) {
unsigned int year = 0;
unsigned int mouth = 0;
unsigned int day = 0;
scanf("%d %d %d", &year, &mouth, &day);
unsigned int nums = 0;
for(unsigned int i = 1; i < mouth; i++) {
if((i == 1 ) || (i == 3) || (i == 5) || (i == 7) || (i == 8) ||(i == 10)) {
nums +=31; // 判断是否为大月 +31天
} else if (i ==2) {
if(runnian_judge(year) == 1) {
nums += 29; // 判断年份为闰年则 + 29天
} else {
nums += 28;
}
} else {
nums +=30; // 小月 +30 天
}
}
printf("%d\n", nums+day); // 本月之前的天数+ 本月的天数
return 0;
}
unsigned int runnian_judge(unsigned int year) {
if (year%400 ==0) {
return 1;
} else if ((year%4 ==0) && (year%100 != 0)) {
return 1;
} else {
return 0;
}
}
int main(void) {
unsigned int year = 0;
unsigned int mouth = 0;
unsigned int day = 0;
scanf("%d %d %d", &year, &mouth, &day);
unsigned int nums = 0;
for(unsigned int i = 1; i < mouth; i++) {
if((i == 1 ) || (i == 3) || (i == 5) || (i == 7) || (i == 8) ||(i == 10)) {
nums +=31; // 判断是否为大月 +31天
} else if (i ==2) {
if(runnian_judge(year) == 1) {
nums += 29; // 判断年份为闰年则 + 29天
} else {
nums += 28;
}
} else {
nums +=30; // 小月 +30 天
}
}
printf("%d\n", nums+day); // 本月之前的天数+ 本月的天数
return 0;
}