# zerojudge a468 February 29 ###### tags: `zerojudge` 題目連結: https://zerojudge.tw/ShowProblem?problemid=a468 這題的目標是 找出兩個日期之間的閏日(2月29日) 解題方法: 我先是定義三個變數month, day, year,num month處理是否在二月之前 day處理是否是29號 year則是處理該年是否為閏年 num則是處理該年到西元元年間有多少閏日 我的作法是分別計算西元元年 到所求年分 包含多少閏日 再將兩個答案相減 解題成果: 程式碼在執行時由於segmentation fault 無法順利執行 ``` c #include<stdio.h> #include<string> using namespace std; int month(string a1){ int n; if(a1=="January"){ n =-1; }else if(a1=="February"){ n =0; }else{ n =1; } return n; } int day(string a1){ int n; if(a1==",29"){ n =1; }else{ n =0; } return n; } int year(int a1){ int n=-1; if(a1%4==0){ n =1; } if(a1%100==0){ n =0; } if(a1%400==0){ n =1; } return n; } int num(int a1){ int n=0; n = a1/4 - a1/100 +a1/400; return n; } int main(){ int na,nb; int n; scanf("%d",&n); string a1; string b1; string a2; string b2; int a3; int b3; for(int i=0 ; i<n ; i++){ scanf("%s",&a1); scanf("%s",&a2); scanf("%d",&a3); na = num(a3); if(year(a3)==0){ na = na-1; }else if(year(a3)==1){ if(month(a1)==-1){ na=na-1; }if(month(a1)==0){ if(day(a2)==0){ na=na-1; } } } scanf("%s",&b1); scanf("%s",&b2); scanf("%d",&b3); nb = num(b3); if(year(b3)==0){ nb = nb-1; }else if(year(b3)==1){ if(month(b1)==-1){ nb=nb-1; }if(month(b1)==0){ if(day(b2)==0){ nb=nb-1; } } } printf("Case %d: %d",i+1,na-nb); } } ```