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

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

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


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;
}
相关文章
|
4月前
|
存储 人工智能 移动开发
AppFlow —— 给您的网站或企微添加AI助手
AppFlow AI助手提供灵活配置,助您轻松实现AI工具的Web页面访问与多种集成方式(H5页面、悬浮框等)。支持自定义页面生成及样式调整,满足个性化需求。文中详细介绍了创建AI助手、模型配置、Web页面集成等步骤,并展示不同场景下的使用效果。此外,还提供了企业微信集成、模型管理和插件扩展等相关操作指引,助力高效利用AI助手提升工作体验。
538 15
AppFlow —— 给您的网站或企微添加AI助手
|
4月前
|
XML Java API
Android翻转动画(卡片翻转效果)
本文介绍了如何实现卡片翻转动画效果,通过Android中的ObjectAnimator结合不同插值器(LinearInterpolator、AccelerateInterpolator、DecelerateInterpolator)完成平滑过渡。示例中以按钮点击触发动画,核心逻辑包括判断视图可见性、设置旋转角度及处理初始Bug(如第一次点击异常)。最终提供完整代码(Java与XML布局),并指出将按钮事件替换为屏幕监听即可满足右滑触发需求。适合初学者学习动画实现原理。
190 0
|
人工智能 运维 监控
现代云平台技术及其应用
在当今数字化时代,云平台技术正日益成为企业转型和创新的关键。本文将探讨现代云平台的定义、架构特点及其在不同行业中的应用案例,旨在帮助读者深入了解并有效应用这一技术。 【7月更文挑战第9天】
589 2
|
9月前
|
人工智能 分布式计算 DataWorks
大数据& AI 产品月刊【2024年11月】
大数据& AI 产品技术月刊【2024年11月】,涵盖本月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
|
9月前
|
安全 云计算
服务器系统资源不足怎么办
服务器系统资源不足怎么办
499 4
|
Web App开发 存储 监控
Node.js中的内存泄漏
【8月更文挑战第31天】Node.js中的内存泄漏
332 1
|
人工智能 NoSQL atlas
如何用MongoDB Atlas和大语言模型,高效构建企业级AI应用?
利用生成式 AI 强化应用程序为客户打造令人叹服、真正差异化的体验意味着将人工智能建立在事实的基础之上
2006 0
|
算法 安全 Linux
Ansible自动化工具copy复制用法
Ansible 中的 copy 模块用于将文件或目录从本地计算机或远程主机复制到远程主机上的特定位置。它是一个功能强大的模块,可用于各种文件传输任务. ### 作用 将配置文件复制到远程服务器 将应用程序部署到远程服务器 将日志文件从远程服务器复制到本地计算机 备份和恢复文件和目录
399 2
Ansible自动化工具copy复制用法
|
数据可视化 SDN Python
复动力系统 | 混沌 | Lozi 映射吸引子的可视化与交互式探索
该文介绍了一篇关于Lozi映射吸引子可视化和交互式探索的文章。Lozi映射是混沌理论中的一个模型,展示非线性动力系统的复杂性。通过Python和matplotlib,作者实现了Lozi映射的可视化,并添加交互功能,允许用户缩放以详细观察混沌吸引子。文中还给出了Lozi映射的数学定义,并提供了Python代码示例,演示如何绘制和动态调整吸引子的显示。
|
数据可视化 算法 数据挖掘
数据分享|R语言IMDb TOP250电影特征数据挖掘可视化分析受众偏好、排名、投票、评分(上)
数据分享|R语言IMDb TOP250电影特征数据挖掘可视化分析受众偏好、排名、投票、评分