小明學長回學校
阿新 • • 發佈:2018-11-10
題目描述
在未來的某一天,小明學長躺在他XXX平米的別墅裡喝著龍井,突然一種莫名其妙的感覺湧上心頭:一晃這麼長的時間過去了,記得當時和隊友在331有時因為想出一道題的好的解法能興奮的喊出來,真想回去再打場比賽。於是小明學長就想約上那些老隊友一起回去看看,但是又不想開車回去,因為他比較喜歡鍛鍊,所以想騎著山地車來次長途的旅行,順便還能看看沿途的風景。現在學長準備year0-month0-day0早晨出發,和老隊友們約好year0-month1-day1晚上到達(晚上更適合回憶嘛╮( ̄▽  ̄)╭),學長想知道這次回去路上需要多少天,但是又懶得計算,所以就麻煩聰明的學弟你來幫學長算算吧。
輸入
第一行輸入一個整數n,表示有n組資料。
每組測試資料佔一行,分別為兩個日期,日期格式為:year-month-day,用空格隔開。具體見輸入樣例。約定兩個日期年份相同。
輸出
對於每組測試資料,輸出佔一行,為兩個日期之間的時間間隔,以天為單位。
樣例輸入
2 2018-10-27 2018-10-30 2018-11-1 2018-11-11
樣例輸出
4 11
解題思路:
1:先判斷是否在同一個月,是,直接day1-day0就可以得答案,不是往下
2:t=day1,
3:判斷(month0+1)<month1是進入迴圈,不是往下
4:month0的剩餘天數加上t就得答案。
#include<iostream> #include<string> #include<ctime> using namespace std; int main() { int n; //n組資料 cin>>n; int year0,month0,day0; int year1,month1,day1; char ch1,ch2; //字元“-”。 char ch3,ch4; int t=0,l; int a; while(n--) { t=0; cin>>year0>>ch1>>month0>>ch2>>day0; cin>>year1>>ch3>>month1>>ch4>>day1; if(month0==month1) //在同一個月 t=day1-day0+1; else //不在同一個月 { t=day1; l=month0+1; while(l<month1) // month1-month0>1 { switch(l) { case 2: if(year0%4==0&&year0%100!=0||year0%400==0) { t=t+29; break; } else { t=t+28; break; } case 3: case 5: case 7: case 8: case 10: case 12: t=t+31; break; case 4: case 6: case 9: case 11: t=t+30; break; } l++; } if(month0==1||month0==3||month0==5||month0==7||month0==8||month0==10) t=t+31-day0+1; //month0所在月份 else if(month0==2) { if(year0%4==0&&year0%100!=0||year0%400==0) t=t+29-day0+1; else t=t+28-day0+1; } else t=t+30-day0+1; } cout<<t; } return 0; }