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;
//计算月的数量,由于前面已经计算出了闰年次数,所以月份不用考虑闰年的29天
int 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;
}
答
题目呢