您的位置:首页 > 其它

九度OJ学习笔记 题目1096

2017-02-28 19:46 274 查看
#include <stdio.h>
#include<iostream>
using namespace std;
#define ISYEAP(x) x%100!=0 && x%4==0|| x%400==0?1:0
//定义宏判断是否为闰年,方便计算每月天数
int dayofMonth[13][2]={//月份从1开始 ,宏判断0,1
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][ISYEAP(year)]){
//若天数超过了当月的最大天数
day=1;
month++;
if(month>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;//保存该天与基准日期间的天数
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);
}
return 0;
}
注意:保存当前日期与原点日期天数差的数组一定要定义在函数体外定义,因为其需要耗费大量的内存。
出现runtime error原因:

题目要求的日期格式是 19950101,注意年月日之间都没有空格,所以要用scanf("%4d%2d%2d",&y1,&m1,&d1)来确定输入格式。用cin怎么写?欢迎大家交流一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: