日期差值

日期差值

http://www.nowcoder.com/questionTerminal/ccb7383c76fc48d2bbc27a2a6319631c

计算两个日期相对于0000 00 00的差值
然后差值相减取绝对值+1就可以了。

#include<iostream>
using namespace std;
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}
};
bool isLeapYear(int year){
    if(year%100!=0&&year%4==0||year%400==0)
        return true;
    return false;
}
char a[9],b[9];
int main(){
    //n为第一个日期相对于0000 00 00的差值,n1为为第二个的差值
    int year,month,day,year1,month1,day1,n,n1;
    while(cin>>a>>b){
        n=n1=0;
        sscanf(a,"%4d%2d%2d",&year,&month,&day);//格式化读入
        sscanf(b,"%4d%2d%2d",&year1,&month1,&day1);
        for(int i=0;i<=year;i++){//记录年差值
            if(isLeapYear(i)){
                n+=366;
            }else n+=365;
        }for(int i=1;i<month;i++){//记录月差值
            n+=daytab[isLeapYear(year)][i];
        }n+=day;//记录日差值
        for(int i=0;i<=year1;i++){
            if(isLeapYear(i)){
                n1+=366;
            }else n1+=365;
        }for(int i=1;i<month1;i++){
            n1+=daytab[isLeapYear(year1)][i];
        }n1+=day1;
        cout<<abs(n-n1)+1<<endl;//差值相减取绝对值+1即可
    }
    return 0;
}
全部评论
计算量太大了 感觉
1 回复 分享
发布于 2024-02-22 17:51 江西
误人子弟,试试19990101和20000101就知道问题了
点赞 回复 分享
发布于 2022-05-03 12:21
为什么定义char a[9];定义成a[8]就会出现错误;
点赞 回复 分享
发布于 2020-04-21 18:30

相关推荐

不愿透露姓名的神秘牛友
昨天 12:10
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
评论
30
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务