蒜头君给定两个日期,请计算相差的天数。比如 \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。保证日期正确且结束日期不早于起始日期。
输出格式
输出一个整数,即是两个日期相差的天数。
输入输出
输入 | 输出 |
2008 1 1 2009 1 1 | 366 |
解题思路
此方法属于暴力解决。将闰年和平年的各月份的日期分别定义到两个数组当中,之后再将相差的年份算出来*365,就是年份差值的天数。在定义一个来接受闰年多出的天数。最后算月份之间相差的天数,再将它们加在一起输出。
代码
#include<stdio.h>
#include<math.h>
int main ()
{
int year1,month1,day1;
int year2,month2,day2;
int i,j;
int year, daye=0;//year为相差年数,daye 为记录瑞年多出的天数。
int day=0;//day 为相差天数
scanf("%d %d %d",&year1,&month1,&day1);
scanf("%d %d %d",&year2,&month2,&day2);
int d[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年是的个月天数
int e[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年时的个月天数
if(year1>year2)
return 0;
else
{
year=year2-year1;
while(year-1)
{
daye+=365;//将相差的年数*365一起加到闰年多出的天数上
year--;
}
for(i=year1+1;i<year2;i++)
{
if(i%4==0&&i%100!=0||i%400==0)
daye++;//闰年多出的天数。
}
if(year1%4==0&&year1%100!=0||year1%400==0)//其中年份为闰年时。
{
for(i=0;i<month1-1;i++)
{
day+=e[i];
}
day=366-(day+day1);//闰年起始日期到最后一天
}
else//平年时
{
for(i=0;i<month1-1;i++)
{
day+=d[i];
}
day=365-(day+day1);//平年起始日期到最后一天
}
if(year2%4==0&&year2%100!=0||year2%400==0)
{
for(i=0;i<month2-1;i++)
{
day+=e[i];
}
day=day+day2;//闰年结束时,一共过了多少天
}
else
{
for(i=0;i<month2-1;i++)
{
day+=d[i];
}
day=day+day2;//平年结束时,一共过了多少天
}
}
printf("%d",day+daye);/*最后输出闰年多出的天数及相差年份的天数,
再加上月份之间相差的天数。*/
return 0;
}