輸入年份和月份,輸出該月天數。
範例: 2009 6 → 30
**公曆閏年**:(year % 4 == 0 && year % 100 != 0) || year % 400 == 0
#includeint main() { int y, m; scanf("%d %d", &y, &m); int leap = (y%4==0 && y%100!=0) || y%400==0; int days; switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = leap ? 29 : 28; break; default: days = -1; // 無效月份 } printf("%d\n", days); return 0; }
int days_in_month(int y, int m) {
if (m == 2)
return ((y%4==0 && y%100!=0) || y%400==0) ? 29 : 28;
if (m == 4 || m == 6 || m == 9 || m == 11)
return 30;
if (m >= 1 && m <= 12)
return 31;
return -1;
}
int days_in_month_lut(int y, int m) {
static const int days[2][13] = {
{0,31,28,31,30,31,30,31,31,30,31,30,31}, // 平年
{0,31,29,31,30,31,30,31,31,30,31,30,31} // 閏年
};
if (m < 1 || m > 12) return -1;
int leap = (y%4==0 && y%100!=0) || y%400==0;
return days[leap][m];
}
int day_of_year(int y, int m, int d) {
static const int cum[13] = {0,0,31,59,90,120,151,181,212,243,273,304,334}; // 平年累積
if (m < 1 || m > 12) return -1;
int leap = (y%4==0 && y%100!=0) || y%400==0;
int days = cum[m] + d + (leap && m > 2);
return days;
}
// Java 8+ LocalDate.of(year, month, 1).lengthOfMonth(); // 直接得天數
計算月天數核心在 **閏年判斷** 与 **2月特殊處理**。工程推薦 **查表法**:O(1)、無分支、易擴展(如農曆、儒略曆)。掌握三種寫法,能應對從筆試到嵌入式開發的各種約束場景。