一种比较优雅的解法(少了很多判断)
#include <iostream> using namespace std; int MonthArray[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int GetMonth_day(int year,int month)//获取当年当月的天数 { int day = MonthArray[month]; if (month == 2 && ((year % 4 == 0) && (year % 100 != 0 || year % 400 == 0))) ++day; return day; } int main() { int a, b,count = 0; while (cin >> a >> b) { // 注意 while 处理多个 case //假设第一个日期为大日期,如果假设错了,再通过下面判断进行交换 int max_year = a/10000;//解析出年月日 int max_month = (a%10000)/ 100; int max_day = a%100; int min_year = b/10000; int min_month = (b%10000)/ 100; int min_day = b%100; if(max_year < min_year|| (max_year == min_year && max_month < min_month)|| (max_year == min_year && max_month == min_month&& max_day < min_day))//判断日期大小 { swap(max_year,min_year); swap(max_month,min_month); swap(max_day,min_day); } //让小日期走完与大日期相差的年月,并将每个月的天数加到总数中,以避免大量判断 while(!(max_year==min_year&&max_month==min_month)) { count += GetMonth_day(min_year,min_month); ++min_month; if(min_month>12) { ++min_year; min_month = 1; } } cout<< count + max_day - min_day+1 <<endl;//这里两个天数之减其实可能是负的,但是之前多加了小日期当月的天数,不会影响结果 } } // 64 位输出请用 printf("%lld")