題目
輸入 2 個日期(y m d),計算日期相隔天數。
想法
2000/8/7 ~ 2010/5/20
【2000年天數 – 到8/7天數】+【2001~2009年天數】+【到5/20天數】
- while(cin!=EOF)。
- 日期 date1 < date2。
- 閏年(一年366天):(可整除以4且不可整除以100) 或 (可整除以400)。
- 4、6、9、11月為 30 天,2月為 28 或 29 天。
- 若同年則不加 y1。
C++解法
#include <iostream>
using namespace std;
int year(int y){
if((y%4==0 && y%100!=0) || y%400==0) return 366;
return 365;
}
int month(int y, int m){
if(m==2){
if(year(y)==366) return 29;
else return 28;
}
if(m==4||m==6||m==9||m==11) return 30;
return 31;
}
int main(){
int y1, m1, d1, y2, m2, d2;
while(cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2){
int ans = 0;
if(y1*10000+m1*100+d1 > y2*10000+m2*100+d2)
swap(y1, y2), swap(m1, m2), swap(d1, d2);
if(y1!=y2) ans += year(y1); //+首年全
for(int m=1; m<=m1-1; m++) ans -= month(y1, m); //-首年已過月
ans -= d1; //-首年已過天
for(int y=y1+1; y<=y2-1; y++) ans += year(y); //+中間年
for(int m=1; m<=m2-1; m++) ans += month(y2, m); //+尾年月
ans += d2; //+尾年天
cout << ans << '\n';
}
}