---
# System prepended metadata

title: zerojudge a468 February 29
tags: [zerojudge]

---

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

```