需要考虑的细节比较多,例如:
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学长提供以上题目练习)