需要考慮的細節比較多,例如:
1、是否同一年
2、是否同一月
3、是否為閏年
4、是否有2月
#include <iostream>
using namespace std;
int month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int y1,m1,d1,y2,m2,d2;
int res = 0;
cin>>y1>>m1>>d1>>y2>>m2>>d2;
if(y1 == y2)
{
if(m1 == m2) //同年同月日期相減
res += d2-d1+1;
else //同年不同月
{
for(int m=m1;m<m2;m++) //先求m1和m2之間天數,含m1不含m2
{
if(m == 2) //存在2月就判斷是否加1
{
if((y1%4 == 0 && y1%100 != 0) || y1%400 == 0)
res += 1;
}
res += month[m];
}
res = res-d1+1; //将m1中天數減掉
res += d2; //再加m2天數
}
}
else
{//不同年,先求中間年的天數
for(int y=y1+1;y<y2;y++)
{
if((y%4 == 0 && y%100 != 0) || y%400 == 0) //如果中間有閏年,多加一天
res += 1;
res += 365;
}
//求y1年剩餘天數,注意從m1開始算
for(int m=m1;m<=12;m++)
{
if(m == 2)
{
if((y1%4 == 0 && y1%100 != 0) || y1%400 == 0)
res += 1;
}
res += month[m];
}
res = res-d1+1; //将d1日期減掉
//求y2年到d2的天數
for(int m=1;m<m2;m++)
{
if((y2%4 == 0 && y2%100 != 0) || y2%400 == 0)
res += 1;
res += month[m];
}
res += d2;
}
cout<<res<<endl;
return 0;
}
(感謝西交wrong學長提供以上題目練習)