C/C++ 结构体(两个日期间的天数)

题目描述

求两个日期d1,d2之间相差的天数d2-d1。

输入

 输入数据有若干组。每组数据一行,有六个整数,表示两个日期d1,d2,格式为:年月日。

输出

 对于每一组数据,输出两个日期d1,d2之间相差的天数, 格式参照样例输出。

样例输入

2000 1 1 2002 10 1
2010 1 10 2010 3 20

样例输出

2002/10/1-2000/1/1=1004
2010/3/20-2010/1/10=69
 #include 
 int daysOfMonth(int y,int m);
 //计算任意两个日期之间的天数
 
 //判断输入有效
 int valiDate(int y,int m,int d){
    if(y>3000||y<1900){
       printf("error year!\n");
    return 1;
    }
  if(m>12||m<1){
        printf("error month!\n");
    return 1;
    }
    if(d>daysOfMonth(y,m)||d<1){
        printf("error day!\n");
    return 1;
    }
    return 0;
 }
 
 //一个整月的天数
 int daysOfMonth(int y,int m){
    if(m==2){
       if(y%4==0&&y%100!=0||y%400==0){
        return 29;
    }else{
        return 28;
    }
    }else if(m==4||m==6||m==9||m==11){
            return 30;
   }else{
            return 31;
    }
 }
 
 //输入年份已经过的天数
 int daysBefore(int y,int m,int d){
    int i,result=0;
    for(i=1;i<=12;i++){
        if(i==m){
       result += d;
        return result;
    }else{
        result += daysOfMonth(y,i);
    }
    }
 }
 
 //计算每年天数
 int daysOfYear(int y){
    if(y%4==0&&y%400!=0||y%400==0){
        return 366;
    }else return 365;
 }
 //主函数
 int main(){
    int y1,m1,d1,y2,m2,d2;
	while(scanf("%d%d%d",&y1,&m1,&d1)!=EOF)
	{
    
   while(valiDate(y1,m1,d1)){
        scanf("%d%d%d",&y1,&m1,&d1);
    }
    scanf("%d%d%d",&y2,&m2,&d2);
    while(valiDate(y2,m2,d2)){
        scanf("%d%d%d",&y2,&m2,&d2);

    }
   int i,result=0;
    for(i=y1;i

 

你可能感兴趣的:(rwoj-AC)