C++簡單實現日期差值

不多廢話,先上代碼

#include<cstdio>
//數組存儲平潤年每月天數 
int month[13][2] = {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
//判斷是否爲閏年------閏年返回true 1 
bool isLeap(int year){
	return (year%4==0&&year%100!=0)||(year%400==0);
} 

int main(){
	int time1,year1,month1,day1;
	int time2,year2,month2,day2;
	/*
		EOF是end of file的縮寫   “!=EOF”  表示文件還沒有結束“=EOF” 表示到文件末尾了。
        你在用函數讀入文件數據的時候,函數總會返回一個狀態,是讀取成功還是失敗,那麼這個狀態怎麼表示呢,所以就約定俗成定義一個標識符表示這個狀態,就有了EOF
	*/ 
	while(scanf("%d%d",&time1,&time2)!=EOF){
		if(time1>time2){
			int temp = time1;
			time1 = time2;
			time2 =temp;
		} 
		year1=time1/10000,month1=time1%10000/100,day1=year1%100;
		year2=time2/10000,month2=time2%10000/100,day2=year2%100;
		
		int ans=1;
		while(year1<year2||month1<month2||day1<day2){
			day1++;
			if(day1==month[month1][isLeap(year1)]+1){
				month1++;
				day1=1;
			}
			if(month1==13){
				year1++;
				month1=1;
			}
			ans++;
		}
		printf("%d\n",ans);
    }
    return 0;
}

基本思路說一哈:

首先確定輸入的兩個日期的大小關係;一個簡單的思路:令天數不斷增加直到小時間比大時間多出1(都是整型),同時必須考慮的問題是閏年與平年兩者2月存在的天數差,然後就是簡單地判斷,天數增加到滿當月時,月份+1,天數歸1;月數增加到滿當年時,年份+1,月數歸1,依次循環,直到達到要求,輸出增加的天數;當然如果年份相差較大可以直接將中間年份轉化成365、366天來簡化循環次數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章