萌新上路,為了完成這個實驗題,摸索了好幾天,好不容易除錯完成,基本沒啥問題了,發出來紀念一下。無論是演算法還是語句都還有很多值得改進之處,望各位不吝賜教!
先說一下思路:
1.計算天數差的難點在於閏年,解決閏年問題就基本沒問題。
2.大體演算法是:計算每個日期到當年年底的天數》計算年與年之間的總天數差(此處認為計算年初到年初或年末到年末都行)>用總天數差加上兩個日期到當年年底天數之差即為結果(用比例線段模擬可得到該演算法)。
以下是實現演算法的兩個主要函式:
int
toey
(int y,
int m,
int d)
//計算到年底的天數;if
(i ==
1)month[1]
=29;for
(m -=1
; m <=
11; m++
)tm +
= month[m]
; tey = tm - d;
return tey;
}intfn(
int y1,
int y2,
int m2,
int d2)
//計算年份總天數差
else
if(y1 == y2)
return0;
else
count = big - small;
for(num =
1; num <= count; num++
)td +
=365
;for
(small; small <= big; small++)if
((year
(y2)==1
)&&((m2 <2)
||((m2 ==2)
&&(d2 <29)
)))td -=1
;return td;
}
合法性判斷主要有兩點:
1.大小月和天數的匹配;
2.平閏年2月天數。
因為是任意年,故不規定年份合法性。
以下是**:
int
year
(int y)
//判斷閏年
intlegal
(int y,
int m,
int d)
//檢測合法性
主函式比較簡單,大部分都是函式呼叫和輸入輸出:
int
main()
system
("pause");
return0;
}
總體**就是上面這樣,下面是完整**:
#include
#include
using
namespace std;
int i;
//標誌是否閏年
int j=1;
//標誌是否合法
intyear
(int y)
//判斷閏年
intlegal
(int y,
int m,
int d)
//檢測合法性
inttoey
(int y,
int m,
int d)
//計算到年底的天數;if
(i ==
1)month[1]
=29;for
(m -=1
; m <=
11; m++
)tm +
= month[m]
; tey = tm - d;
return tey;
}intfn(
int y1,
int y2,
int m2,
int d2)
//計算年份總天數差
else
if(y1 == y2)
return0;
else
count = big - small;
for(num =
1; num <= count; num++
)td +
=365
;for
(small; small <= big; small++)if
((year
(y2)==1
)&&((m2 <2)
||((m2 ==2)
&&(d2 <29)
)))td -=1
;return td;
}int
main()
system
("pause");
return0;
}
C 計算任意兩個日期之間的天數
c 寫的乙個計算兩個日期之間天數的小程式 cpp view plain copy include include struct tagdate 設定日期 void setdate int y,int m,int d,tagdate date 是否閏年 int isleapyear int year ...
c 計算兩個日期之間的天數差
有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的,我們規定他們之間的天數為兩天。輸入形式為yyyymmdd,例如 20110412 20110422 輸出為 11 include define isyeap x x 100 0 x 4 0 x 400 0?1 0 定義巨集判斷是否是閏年,方便計...
php計算任意兩個日期之間的天數
php計算任意兩個日期之間的天數 基本思想,算術減法 cur date 2009 04 11 last date 2008 12 20 date dist 0000 03 21 間隔大約3個月21天 116天 create function function date distance last d...