九度OJ学习笔记 题目1096

来源:互联网 发布:mac怎么创建网页 编辑:程序博客网 时间:2024/04/28 16:23
#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怎么写?欢迎大家交流一下。
0 0