一种比较优雅的解法(少了很多判断)
#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")

京公网安备 11010502036488号