蒜头君给定两个日期,请计算相差的天数。比如 \text{2010-1-1}2010-1-1 和 \text{2010-1-3}2010-1-3 相差 22 天。
输入格式
共两行:
第一行包含三个整数 startYearstartYear,startMonthstartMonth,startDaystartDay,分别是起始年、月、日。
第二行包含三个整数 endYearendYear,endMonthendMonth,endDayendDay,分别是结束年、月、日。
相邻两个整数之间用单个空格隔开。
年份范围在 1\sim 30001∼3000。保证日期正确且结束日期不早于起始日期。
输出格式
输出一个整数,即是两个日期相差的天数。
Sample Input
2008 1 1 2009 1 1
Sample Output
366
解题思路:首先用宏定义判断是否是闰年,接着用数组定义十二个月份,(闰年二月29天,非闰年二月28天),运用循环和if语句统计天数,最后输入两个时间(年月日),得到相差天数。
#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;
}