给定两个年月日,计算之间相隔的天数(数学)

编程入门 行业动态 更新时间:2024-10-13 06:17:54

给定两个年月日,计算之间相隔的<a href=https://www.elefans.com/category/jswz/34/1767036.html style=天数(数学)"/>

给定两个年月日,计算之间相隔的天数(数学)

加入给你两个年月日的日期,让你计算它们两个之间共有多少天,我们可以分为以下几种情况:↓↓↓

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;elsex+=365;}}cout<<x<<endl;return 0;
}

 

更多推荐

给定两个年月日,计算之间相隔的天数(数学)

本文发布于:2024-03-05 18:00:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1712992.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:天数   年月日   两个   数学

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!