include

include

/* run this program using the console pauser or add your own getch, system("pause") or input loop /
using namespace std;
//用来判断平年还闰年的函数,平年返回0,闰年返回1;
int is_leapyear(int i){
if(i%100==0){
if(i%400==0){
return 1;//闰年
}
}
else{
if(i%4==0){
return 1;//闰年
}
}
return 0;//平年
}
//返回平闰年相应的天数,如果参数为0,返回365(平年天数),参数为1,返回366(闰年天数)
int num_year(int i){
if(i==0){
return 365;
}
else{
return 366;
}
}
int main(int argc, char*
argv) {
int daytab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int sub=1;//记录相差的天数
//
int begin;
int end;
//接收输入的年份
int row;
//标记平闰年
int y1,m1,d1;
int y2,m2,d2;
scanf("%d%d",&begin,&end);
//接受日期
//分离日期****
y1=begin/10000;
y2=end/10000;
m1=(begin-10000y1)/100;
m2=(end-10000
y2)/100;
d1=(begin-10000y1-100m1);
d2=(end-10000y2-100m2);
//***

//考虑到输入日期不一定是先输入小日期在数日大日期。
    //所以将日期进行判断与调换。小的日期为1,大的为2
if(y1==y2){
    if(m1>m2){
    int temp1=m1;
        int temp2=d1;
    m1=m2;
    d1=d2;
    d2=temp2;
    m2=temp1;
    }
} 
    //同年不同月,根据实际情况调换月和日
if(y1>y2){
    int temp3=y1;
    int temp1=m1;
    int temp2=d1;
    m1=m2;
    d1=d2;
    y1=y2;
    y2=temp3;
    d2=temp2;
    m2=temp1;            
}
//不同年,根据实际情况调换年月日   
//反转日期******** 
    //先算年数,比如20120223-20130511,那么先将整年数相加,如果m1<=2,则加第i年的年数
    //如果m1>2则加(i+1)年的年数。由于每一年只有二月有差别。比如20120223-20130511,从
    //20120223到20130223,这期间的年数可想成,2012年过了2.24-12.31,2013年过了1.1-2.23,由于
    //2012年是闰年,所以,这期间天数为366天(即第i年)。但是20110324-20120324,这期间天数理解      
    //为,过了2012的1.1-3.24,过了2011年的3.25-12.31。2012年是闰年,2月有29天,故期间为366天
for(int i=y1;i<y2;i++){
    if(m1<=2){
    sub+=num_year(is_leapyear(i));
    }
    else{
    sub+=num_year(is_leapyear(i+1));
    }
} 
    //把小年份提到了与大年分同年,比如,20120223-20130511,经过上述步骤sub的累加,已经将         
    //20120223提到了20130223这个日期
row=is_leapyear(y1);//判断平年闰年
    //按照上面的步骤算月,显然如果m1<m2,则经过年份提前,还需要sub加上几日才可到达大日期。
    //如果m1>m2.则经过年份提前,sub显然多加了几日,需要减去。
    //如果m1=m2,则需直接判断d1与d2;
    //*********************************
if(m1==m2){
    if(d1>d2){
    sub-=(d1-d2);
    }
    else{
    sub+=(d2-d1);
    }
}
    //月份相同,直接算d。如果d1>d2,说明sub多加了,需要减去abs(d1-d2)
    //如果d1<d2,说明sub少加了,需要加上abs(d1-d2)
    //**********************************
    //月份不同
else{
        //m1<m2,少加了天数
    if(m1<m2){
    for(int i=m1;i<m2;i++){
            sub+=daytab[row][i];
    }
        //与上面加年数思路一样,20120223-20120512,2.23-3.23,期间过了29天(不同点是月份都是加
        //第i月)
    }
        //如果m1>m2,多加了天数,这里较难想,我们可以理解为,如果小年份经过加年数之后变成
        //了20150512,而大年份是20150223,显然多加了,仍然可以从2.23开始算到5.23,只不过这次            
        //sub是减去每月月数。    
    if(m1>m2){
    for(int i=m2;i<m1;i++){
            sub-=daytab[row][i];
    }
    }
       //**********************************
        //天数同上,若1>2则加,1<2则减
    if(d1>d2){
    sub-=abs(d1-d2);            
    }
    if(d1<d2){
    sub+=abs(d1-d2);
    }
    }
    printf("%d\n",sub); 

// }
return 0;
}