加入给你两个年月日的日期,让你计算它们两个之间共有多少天,我们可以分为以下几种情况:↓↓↓
1.两个年份相等:首先判断是否为闰年,接下来,
①如果对应的月份也相等,直接用大的天数减去小的天数。例如:2000.01.01和2000.01.06,就直接6-1=5天。
②如果对应的月份相差等于1,就用小的月份总天数减去对应已有的小的月份的天数,然后再加上大的月份已有的天数。例如:2000.01.02和2000.02.03,就是用31-2+3=32天。
③如果对应的月份相差大于1,先按照②的方法算出两头的天数,然后用for循环去依次累加中间那些满天数的月份即可。例如:2000.01.02和2000.03.05,就是31-2+5+29=63天。
2.两个年份相差等于1:首先仍然要判断是否为闰年,接下来,
①先计算数值小的年份,用for循环依次累加数值小的年份的满天数的月份(这些月份全部走过),然后用这一年的总天数(366或者365)减去已经过去的满天数的月份,再减去当前要求计算的较小的日期对应月份的天数。
②再计算数值大的年份,用for循环依次累加这一年满天数的月份,然后再加上要求计算的较大的日期对应的月份的天数。然后再加上数值大的年份的天数即可。例如:2000.02.02和2001.02.05,就是366-31-2+31+5=369。
3.两个年份相差大于1:首先按照2的方法计算两头的天数,接下来:
①用for循环去依次累加(year1,year2)区间内年份的天数,如果是闰年就加上366,平年就加上365就可以了。例如:2000.02.05和2003.03.07,就是366-31-5+31+28+7+365+365=1126。
注:我的输入保证第二个日期大于第一个日期。
程序代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int num1[12]={31,29,31,30,31,30,31,31,30,31,30,31}; int num2[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int judge(int year,int month1,int month2,int day1,int day2) { int sum=0; if((year%4==0&&year%100!=0)||year%400==0) { if(month1==month2) return day2-day1; if((month2-month1)==1) return num1[month1-1]-day1+day2; if((month2-month1)>1) { sum=num1[month1-1]-day1+day2; for(int i=month1+1;i<=month2-1;i++) sum+=num1[i-1]; return sum; } } else { if(month1==month2) return day2-day1; if((month2-month1)==1) return num2[month1-1]-day1+day2; if((month2-month1)>1) { sum=num2[month1-1]-day1+day2; for(int i=month1+1;i<=month2-1;i++) sum+=num2[i-1]; return sum; } } } int frontday(int year,int month,int day) { int sum=0; if((year%4==0&&year%100!=0)||year%400==0) { for(int i=0;i<month-1;i++) sum+=num1[i]; return sum+day; } else { for(int i=0;i<month-1;i++) sum+=num2[i]; return sum+day; } } int backday(int year,int month,int day) { int sum=0; if((year%4==0&&year%100!=0)||year%400==0) { for(int i=0;i<month-1;i++) sum+=num1[i]; return 366-sum-day; } else { for(int i=0;i<month-1;i++) sum+=num2[i]; return 365-sum-day; } } int main() { int y1,m1,d1,y2,m2,d2,x=0; scanf("%d-%d-%d",&y1,&m1,&d1); scanf("%d-%d-%d",&y2,&m2,&d2); if(y2==y1) x+=judge(y1,m1,m2,d1,d2); if((y2-y1)==1) x+=backday(y1,m1,d1)+frontday(y2,m2,d2); if((y2-y1)>1) { x+=backday(y1,m1,d1)+frontday(y2,m2,d2); for(int i=y1+1;i<=y2-1;i++) { if((i%4==0&&i%100!=0)||i%400==0) x+=366; else x+=365; } } cout<<x<<endl; return 0; }