C语言:用户输入包含年,月,日的日期,请计算两个日期间相隔的天数是(有两个用例没有通过)

C语言:用户输入包含年,月,日的日期,请计算两个日期间相隔的天数是(有两个用例没有通过)

问题描述:


#include<stdio.h>
int sum1(int n,int m,int d);
int main()
{
    int q,w,e,r,t,y;
    scanf("%d %d %d %d %d %d",&q,&w,&e,&r,&t,&y);
    int v;
    v = sum1(r, t, y)-sum1(q, w, e);
    printf("采集时间为%d天\n",v);
    
}
int sum1(int n,int m,int d)
{
//输入年月日
    int i;
    int cnt =0;
    scanf("%d %d %d",&n,&m,&d);
//计算闰年的次数,闰年有多少次就要加多少天
    int a[n];
    for (i=1; i<n+1; i++)
{
        a[i] = i;
        if((a[i]%4==0&&a[i]%100!=0)||a[i]%400==0)
            cnt++;
}
    if ((n%4==0&&n%100!=0)||n%400==0)
{
        if(m<3&&(m!=2&&d!=29)){
            cnt = cnt - 1;}
}
//计算普通年的天数
    int sum1;
    sum1 = 365 * n;
//计算月的数量,由于前面已经计算出了闰年次数,所以月份不用考虑闰年的29int sum2 = 0;
    int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    for(i=0;i<m;i++)
{
    sum2 = sum2 + month[i];
}
//计算天数
    int sum3 = d;
    int sum;
    sum = sum1 + sum2 +sum3 +cnt;
    return sum;
}

供参考:

//用户输入包含年,月,日的日期,请计算两个日期间相隔的天数

#include <stdio.h>
int Sum_days(int y, int m, int d, int y1, int m1, int d1)
{
    int M[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    int s, year, month, flg;
    for (month = m, year = y, s = 0; ; ++month > 12 ? (month = 1, year++) : month)
    {
        if (year == y1 && month == m1) break;
        flg = 0;
        if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
            flg = 1;
        s += M[month - 1];
        if (flg == 1) s += 1;
    }
    s += (d1 - d);
    return s;
}
int main()
{
    int y, m, d, y1, m1, d1;
    printf("Input yyyy mm dd  yyyy1 mm1 dd1:");
    scanf("%d%d%d%d%d%d", &y, &m, &d, &y1, &m1, &d1);
    printf("%d", Sum_days(y, m, d, y1, m1, d1));
    return 0;
}

题目呢