蒜头君给定两个日期,请计算相差的天数。比如 2010-1-1 和 2010-1-3 相差 2 天。
输入格式:
共两行:
第一行包含三个整数 startYear,startMonth,startDay,分别是起始年、月、日。
第二行包含三个整数 endYear,endMonth,endDay,分别是结束年、月、日。
相邻两个整数之间用单个空格隔开。
年份范围在 1∼3000。保证日期正确且结束日期不早于起始日期。
输出格式:
输出一个整数,即是两个日期相差的天数。
#include <stdio.h>
#include <math.h>
#define leapYear(y) ((y%4==0)&&(y%100!=0)||(y%400==0))//判断是否是闰年
struct date
{
int years;
int months;
int days;
};
int days_on_month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//分别代表十二个月份
int i;
int days_date(struct date s)//计算天数
{
int sum=0;//统计天数
for (int i = 0; i < s.years; i++)
{
if (leapYear(i))
sum += 366;
else sum += 365;
}
if (leapYear(i))//判断是否是闰年
days_on_month[2]=29;//闰年二月29天
else
days_on_month[2]=28;//非闰年二月28天
for (int k = 1; k < s.months; k++)
sum += days_on_month[k];
return sum+s.days;
}
int diff(struct date s1, struct date s2)//计算两个时间的差
{
return abs(days_date(s1)-days_date(s2));
}
int main()
{
struct date s1, s2;
scanf("%d %d %d", &s1.years, &s1.months, &s1.days);
scanf("%d %d %d", &s2.years, &s2.months, &s2.days);
printf("%d\n", diff( s1, s2));
return 0;
}