首页 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
俄罗斯方块
↓俄罗斯方块↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
资讯 业界资讯 软件杂谈 编程开发 网站建设 网络观查 搜索引擎 移动应用 网站运营 网络地图
开发 移动开发 Web前端 架构设计 编程语言 互联网 数据库 系统运维 云计算 开发杂谈
[编程语言] 九度1096:日期差值
九度1096:日期差值

http://ac.jobdu.com/problem.php?pid=1096
很经典的计算任意两个日期之间的差值。
方法:利用预处理,以空间换时间的方法,计算任意日期与初始日期0年1月1日之间的差值。再讲两差值求差+1即可。本题关键在预处理部分
#include<stdio.h>
#define ISYEAR(x) x%100!=0&&x%4==0||x%400==0?1:0
int dayOfMonth[13][2]={
    0,0,
    31,31,
    28,29,
    31,31,
    30,30,
    31,31,
    30,30,
    31,31,
    31,31,
    30,30,
    31,31,
    30,30,
    31,31
};
struct Date{
    int Day;
    int Month;
    int Year;
    void nextDay(){  //计算下一天日期
        Day++;
        if(Day>dayOfMonth[Month][ISYEAR(Year)]){//如果日期超过了当月的最大日期
            Day=1;
            Month++;//进入下一月
            if(Month>12){//月份超过12
                Month=1;
                Year++;//进入下一年
            }
        }
    }
};
 
int buf[5001][13][32];//保持预处理的天数
int Abs(int x){
    return x<0?-x:x;
}
 
int main()
{
    Date tmp;
    int cnt=0;//天数计数
    tmp.Day=1;
    tmp.Month=1;
    tmp.Year=0;//初始化日期类对象为0年1月1日
    while(tmp.Year!=5001){//日期不超过5000年
        buf[tmp.Year][tmp.Month][tmp.Day]=cnt;//将该日与0年1月1日的天数差保持起来
        tmp.nextDay();//计算下一天日期
        cnt++;
    }
    int d1,m1,y1;
    int d2,m2,y2;
    while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF){
        scanf("%4d%2d%2d",&y2,&m2,&d2);
        printf("%d\n",Abs(buf[y2][m2][d2]-buf[y1][m1][d1])+1);
    }
}


 此文从网络中自动搜索生成,不代表本网站赞成被搜索网站的内容或立场    查看原文
 
  网站联系 软件世界网-www.sjsjw.com ©2014 蜀ICP备06016416号 三峰网旗下网站