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

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

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


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;
}
相关文章
|
1月前
【九度 03】两个日期之间的天数
【九度 03】两个日期之间的天数
64 0
|
6月前
31.假定2007年的一月一日是星期一,输入一个时间(包含年、月、日),求出它是星期几。
31.假定2007年的一月一日是星期一,输入一个时间(包含年、月、日),求出它是星期几。
48 0
|
6月前
|
Linux C++ iOS开发
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
99 0
计算日期到天数转换
计算日期到天数转换
127 0
计算两个字符串类型的日期相差的天数或者小时数,计算日期字符串到今天的年龄
计算两个字符串类型的日期相差的天数或者小时数,计算日期字符串到今天的年龄
175 0
解决计算 0:00 到 12:00之间任意一个时间时针和分针的夹角。
解决计算 0:00 到 12:00之间任意一个时间时针和分针的夹角。
143 0
L1-004 计算摄氏温度 (5 分)
L1-004 计算摄氏温度 (5 分)
91 0
给定一个年月日,计算那天是星期几(数学)
给定一个年月日,计算那天是星期几(数学)
|
Serverless
机房收费系统——用DateDiff函数计算两个日期之间的时间差
机房收费做到上机和下机部分时,需要计算从上机到下机之间的时间差,从而计算出上机期间所花的费用。
7-4 计算摄氏温度 (10 分)
给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。