九度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怎么写?欢迎大家交流一下。
相关文章推荐
- 【学习笔记】〖九度OJ〗题目1443:Tr A
- 【学习笔记】〖九度OJ〗题目1186:打印日期
- 【学习笔记】〖九度OJ〗题目1104:整除问题
- 【学习笔记】〖九度OJ〗题目1433:FatMouse
- 【学习笔记】〖九度OJ〗题目1156:谁是你的潜在朋友
- 【学习笔记】〖九度OJ〗题目1161:Repeater
- 【学习笔记】〖九度OJ〗题目1437:To Fill or Not to Fill
- 【学习笔记】〖九度OJ〗题目1104:整除问题
- 【学习笔记】〖九度OJ〗题目1156:谁是你的潜在朋友
- 【学习笔记】〖九度OJ〗题目1161:Repeater
- 【学习笔记】〖九度OJ〗题目1437:To Fill or Not to Fill
- 九度OJ学习笔记 题目1156
- 【学习笔记】〖九度OJ〗题目1153:括号匹配问题
- 九度OJ学习笔记 题目1023
- 【学习笔记】〖九度OJ〗题目1464:Hello World for U
- 【学习笔记】〖九度OJ〗题目1432:叠筐
- 【学习笔记】〖九度OJ〗题目1153:括号匹配问题
- 【学习笔记】〖九度OJ〗题目1138:进制转换
- 【学习笔记】〖九度OJ〗题目1432:叠筐
- 【学习笔记】〖九度OJ〗题目1326:Waiting in Line