题解 | #日期差值#
日期差值
https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c
#include <iostream> using namespace std; void Swap(int& year1, int& year2, int& month1, int& month2, int& day1, int& day2) { int tyaer = year1; year1 = year2; year2 = tyaer; int tday = day1; day1 = day2; day2 = tday; int tmonth = month1; month1 = month2; month2 = tmonth; } int main() { int day1, day2, ans = 0, Month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; cin >> day1 >> day2; int year1 = day1 / 10000; int year2 = day2 / 10000; int month1 = (day1 % 10000) / 100; int month2 = (day2 % 10000) / 100; day1 = (day1 % 100); day2 = (day2 % 100); if (year2 > year1) //确保year1 > year2 { Swap(year1, year2, month1, month2, day1, day2); } else if (year1 == year2) { if (month2 > month1) { Swap(year1, year2, month1, month2, day1, day2); } else if (month1 == month2) { if (day2 > day1) { Swap(year1, year2, month1, month2, day1, day2); } } } //开始计算天数 if (year1 == year2) { if (month1 > month2) { ans+=(Month[month1]-day1+1); for(int i = 0;i<((month1 - month2)-1);i++) { ans+=Month[month1+i+1]; } ans+=day2; if(month1<=2&&(year1 % 4 == 0 && (year1 % 100 != 0 || year1 % 400 == 0))) { ++ans; } cout<<ans; exit(0); } else if (month1 == month2) { if (day1 > day2) { if ((day1 + 1) == day2) { cout << 2; exit(0); } ans = day1 - day2 + 1; cout << ans; exit(0); } else { cout << 0; exit(0); } } } else { int flag = year1 - year2; if(flag == 1) { if(month1 > month2) { ans+=365; ans+=(Month[month1-1]-day1+1); for(int i = 0;i<((month1 - month2)-1);i++) { ans+=Month[month1+i+1]; } ans+=day2; if((month1<=2&&(year1 % 4 == 0 && (year1 % 100 != 0 || year1 % 400 == 0)))||(month2<=2&&(year2 % 4 == 0 && (year2 % 100 != 0 || year2 % 400 == 0)))) { ++ans; } cout<<ans; exit(0); } ans+=(Month[month1]-day1+1); for(int i = 0; i < 12 - month1; i++) { ans+=Month[month1+i+1]; } for(int i = 0; i < month2 - 1; i++) { ans+=Month[i+1]; } ans+=day2; if((month1<=2&&(year1 % 4 == 0 && (year1 % 100 != 0 || year1 % 400 == 0)))||(month2<=2&&(year2 % 4 == 0 && (year2 % 100 != 0 || year2 % 400 == 0)))) { ++ans; } cout<<ans; exit(0); } else { int num = year1 - year2 -1; ans = 365 * num; ans+=(Month[month1]-day1+1); for(int i = 0; i < 12 - month1; i++) { ans+=Month[month1+i+1]; } for(int i = 0; i < month2 - 1; i++) { ans+=Month[i+1]; } ans+=day2; if((month1<=2&&(year1 % 4 == 0 && (year1 % 100 != 0 || year1 % 400 == 0)))||(month2<=2&&(year2 % 4 == 0 && (year2 % 100 != 0 || year2 % 400 == 0)))) { ++ans; } ans+=((num+2)/4); cout<<ans; exit(0); } } return 0; }