题目1096:日期差值
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:3460
解决:1225
-
题目描述:
-
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
-
输入:
-
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
-
输出:
-
每组数据输出一行,即日期差值
-
样例输入:
-
20110412 20110422
-
样例输出:
-
11
//日期差值 #include<iostream> #include<string> #include<stdlib.h> #include<algorithm> using namespace std; #define ry 366 #define nry 365 int rnum(int a,int b);//中间闰年数目 bool rn(int a){//判断闰年 if((a%4==0 && a%100!=0) || a % 400==0) return true; else return false; } int janD(int m,bool a,int t){ if(m==2 && a) return 29; if(m==2 && !a) return 28; else return t; } int main() { //闰年日期数组 int dayOfMonth[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; string begin,end; //输入 while(cin>>begin>>end){ if(begin > end) swap(begin,end); //提取 int yb,mb,db; int ye,me,de; int midy=0,midm=0,midd=0; yb = atoi(begin.substr(0,4).c_str()); mb = atoi(begin.substr(4,2).c_str()); db = atoi(begin.substr(6,2).c_str()); ye = atoi(end.substr(0,4).c_str()); me = atoi(end.substr(4,2).c_str()); de = atoi(end.substr(6,2).c_str()); //同年 int i; if(yb==ye) { midy = 0; for(i=mb+1;i<=me-1;i++) midm += janD(i,rn(yb),dayOfMonth[i-1]); } else{ midy = rnum(yb,ye) * ry + (ye-yb-rnum(yb,ye)-1)*nry; for(i = mb +1;i <=12;i++) midm += janD(i,rn(yb),dayOfMonth[i-1]); for(i = 1;i <= me-1;i++) midm += janD(i,rn(ye),dayOfMonth[i-1]); } //同年同月 if(yb==ye && mb == me){ midd +=de-db+1; } else{ midd +=janD(mb,rn(yb),dayOfMonth[mb-1])-db+1; midd += de; } //求和 int allDay = midm + midd + midy; cout <<allDay<<endl; } return 0; } int rnum(int a,int b){ int num=0; for(int i =a+1;i<b;i++) if(rn(i)) num++; return num; } //string转int atoi(...c_str()) //注意前大后小 /************************************************************** Problem: 1096 User: ranchothu Language: C++ Result: Accepted Time:0 ms Memory:1520 kb ****************************************************************/