C++ 计算 日期差值(牛客网)

点击链接即可查看题目:日期差值_牛客题霸_牛客网

一、 题目

描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

输入描述:

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出描述:

每组数据输出一行,即日期差值

示例1

输入:

复制代码
20110412
20110422

输出:

复制代码
11

二、 代码

复制代码
#include <cstdio>
#include<iostream>
using namespace std;

bool IsLeapYear(int year)
{
    return (year%4==0&&year%100!=0)||(year%400==0);
}

int daytab[2][13]={
    {0,31,28,31,30,31,30,31,31,30,31,30,31},
    {0,31,29,31,30,31,30,31,31,30,31,30,31}
};

int calDays(int min_year,int year,int month,int day)
{
    int all_days=0;
    for(int i=min_year;i<year;i++)
    {
        if(IsLeapYear(i)){
            all_days+=366;
        }
        else all_days+=365;
    }
    

    if(IsLeapYear(year)){
       for(int j=1;j<month;j++)
       {
            all_days+=daytab[1][j];
        }
    }
    else{
        for(int j=1;j<month;j++)
        {
            all_days+=daytab[0][j];
        }
    }    
    all_days+=day;
    return all_days;
}

int main()
{

    int year1,month1,day1,year2,month2,day2;
    scanf("%4d%2d%2d",&year1,&month1,&day1);
    scanf("%4d%2d%2d",&year2,&month2,&day2);
    int min_year=min(year1,year2);
    
    int all_day1=calDays(min_year,year1,month1,day1);
    int all_day2=calDays(min_year,year2,month2,day2);       
    
    cout<<abs(all_day1-all_day2)+1;
    return 0;
}
相关推荐
蒸蒸yyyyzwd6 小时前
秋招学习笔记 day46
c++·八股
码匠许师傅10 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
无名猿10 小时前
new/delete 与 malloc/free:为什么绝对不能混用
c++·内存管理·现代c++·踩坑记录
2601_9622186112 小时前
C++中decltype关键字的实现
开发语言·c++
繁华的地方不一定留下你的脚印13 小时前
C++ std::variant 与 std::visit:安全保存多种类型,写清每个处理分支
开发语言·c++
程序员老陆13 小时前
WIN32_LEAN_AND_MEAN:Windows 头文件里的“精简编译开关”
c++·windows
hold?fish:palm14 小时前
45 二叉树的右视图
开发语言·c++·算法
ShineWinsu14 小时前
对于Redis:Redis的认识以及分布式系统的解析
linux·数据库·c++·redis·缓存·消息队列·分布式架构
布莱克60514 小时前
在C++中,构造函数能不能是虚函数?析构函数为什么要虚?
开发语言·c++·构造函数·析构函数·虚函数
旖旎夜光15 小时前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控