经典算法:计算两个日期之间的天数
生活随笔
收集整理的這篇文章主要介紹了
经典算法:计算两个日期之间的天数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
如題所示,這個算法就是寫起來麻煩一點,不過還是很簡單的,思路清晰就非常好做
思路:用兩套數(shù)組分別存儲每個月的天數(shù),分別是閏年和非閏年,分別為num1[] 和 num2[];
**然后就是先計算年和年之間的差距{
相距一年:為第一年的剩下日子+第二年開始的日子
相距一年以上:為初始年的剩下日子+末尾年開始的日子+中間年份日子
相距幾個月:計算幾個月的日期差
}**
以上思路就是如此,代碼也很簡單,附上相關(guān)注釋,一看就懂,不要覺得多,都是一個個的函數(shù),一看就能明白
#include <iostream> using namespace std; int num1[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; int num2[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int frontday(int year,int month,int day){ //計算這年過了多少天了int sum=0;if((year%100!=0 &&year%4==0) || year%400==0){for(int i=0;i<month-1;i++){sum+=num1[i];}return sum+day;}else{for(int i=0;i<month-1;i++){sum+=num2[i];}return sum+day;} } int backday(int year,int month,int day){//計算這年還剩多少天int sum=0;if((year%100!=0 &&year%4==0) || year%400==0){for(int i=0;i<month-1;i++){sum+=num1[i];}return 366-(sum+day);}else{for(int i=0;i<month-1;i++){sum+=num2[i];}return 365-(sum+day);} } int isyear(int year){ //計算某年是否是閏年,返回不同天數(shù)if((year%100!=0 &&year%4==0) || year%400==0){return 366;}else return 365; } int JudgeMonthDay(int year,int month1,int month2,int day1,int day2){ //計算幾個月之間的天數(shù),這個思路同計算不同年之間的天數(shù)int sum=0;if((year%100!=0 &&year%4==0) || year%400==0){if(month1==month2) return day2-day1;if((month2-month1)==1){return (num1[month1-1]-day1+day2);}if((month2-month1)>1){sum = num1[month1-1]-day1+day2;for(int i=month1+1;i<=month2-1;i++){sum+=num1[i-1];}return sum;}}else{if(month1==month2) return day2-day1;if((month2-month1)==1){return num2[month1-1]-day1+day2;}if((month2-month1)>1){sum = num2[month1-1]-day1+day2;for(int i=month1+1;i<=month2-1;i++){sum+=num2[i-1];}return sum;}} } void main(){cout<<"請輸入兩個日期,分別為年月日,都用空格隔開"<<endl;int year1,month1,day1;int year2,month2,day2;cin>>year1>>month1>>day1>>year2>>month2>>day2;int sum=0; //以下分類討論計算不同年之間天數(shù)if((year2-year1)<0) cout<<"應(yīng)該先輸入小的年份,輸入錯誤";if((year2-year1)==0){cout<<JudgeMonthDay(year1,month1,month2,day1,day2)<<endl;}if((year2-year1)==1) cout<<backday(year1,month1,day1)+frontday(year2,month2,day2)<<endl;if((year2-year1)>1){sum = backday(year1,month1,day1)+frontday(year2,month2,day2);for(int i=year1+1;i<=year2-1;i++){sum+=isyear(i);}cout<<sum<<endl;}system("pause"); }附上一個可以用來測試的鏈接地址:
http://day.9om.com/
總結(jié)
以上是生活随笔為你收集整理的经典算法:计算两个日期之间的天数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2d-x csb特效文件显示
- 下一篇: Re-parameterizing Yo