【编程题】获得月份天数 -- 来自牛客网
题目要求:输入年份和月份,计算这一年这个月有多少天。
输入描述:多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
输出描述:针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。
注意:
下面👇方案中,我把代码解释放到代码里面
方案一:if...else语句
有逻辑性,方便看明白
int main() { //y表示年份year,m表示月份month,d表示天数day int y = 0, m = 0, d = 0; //printf("请输入某年某月份:"); while (scanf("%d %d", &y, &m) != EOF) { //判断月份的输入是否错误 if (m > 12 && m < 1) { printf("输入月份错误,请重新输入:"); } else { //判断年份是否闰年 if ((y % 100 != 0 && y % 4 == 0) || (y % 400 == 0)) { if (m == 2) { d = 29; } else if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) { d = 31; } else { d = 30; } } //年份不是闰年 else { if (m == 2) { d = 28; } else if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) { d = 31; } else { d = 30; } } } //printf("%d年%d月份的天数是:%d\n", y, m, d); //printf("请输入某年某月份:"); } return 0; }
方案二:数组(最简单)
int main() { int y = 0, m = 0, day = 0; int d[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; //注意下标: 0 1 2 3 4 5 6 7 8 9 10 11 12(1月份对应下标1,以此类推) //输入年份和月份 while (scanf("%d %d", &y, &m) != EOF) { day = d[m]; //判断是否闰年 if ((y % 400 == 0) && ((y % 100 != 0) || (y % 4 == 0))) { if(m==2) { day++; } } printf("%d\n", day); } }
方案三:switch语句
int is_runnian(int y) { if ((y % 400 == 0) && ((y % 100 != 0) || (y % 4 == 0))) return 1; else return 0; } int main() { int y = 0, m = 0; while(scanf("%d %d", &y, &m)!=EOF) { int d = 31; switch (m) { case 4: case 6: case 9: case 11: { d = 30; break; } case 2: { if (is_runnian(y)) d = 29; else d = 28; break; } } printf("%d\n", d); } }