# 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);
}
}
```