1928: 日期差值 codeup
开始水~~~~~~~~~~~~~~~~~
题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入
20130101
20130105
样例输出
5
#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;string d1,d2;
int month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};void run(int y)
{if(y%400 == 0 || (y%4==0 && y%100!=0)) month[2] = 29;else month[2] = 28;
}int cul(int y1,int m1,int t1,int y2,int m2,int t2)
{int res = 0;//年份相同 直接算if(y1 == y2){run(y1);for(int i=m1;i<m2;i++){res += month[i];}res += t2;res -= t1;res++;//这里加1是因为 题目说的连续算2天return res;}for(int i=y1;i<=y2;i++){run(i);if(i == y1)//单独算一开始的年份还差多少天到第二年{for(int j=m1;j<=12;j++){res += month[j];}res -= t1;}else if(i == y2)//单独算最后一年过了多少天{for(int j=1;j<m2;j++){res += month[j];}res += t2;}else if(i<y2)//算第一年和最后一年之间差的那些年的天数{if(month[2] == 28) res += 365;else res += 366;}}res++;//这里加1是因为 题目说的连续算2天return res;
}int main()
{//竟然是多组输入 哈基题while(cin>>d1>>d2){//换成小的年份在前if(d1>d2){string s = d1;d1 = d2;d2 = s;}//很明显 提取年 月 日int y1 = 0, y2 = 0;for(int i=0;i<4;i++){y1 = y1*10 + (d1[i]-'0');y2 = y2*10 + (d2[i]-'0');}int m1 = 0, m2 = 0;for(int i=4;i<6;i++){m1 = m1*10 + (d1[i]-'0');m2 = m2*10 + (d2[i]-'0');}int t1 = 0, t2 = 0;for(int i=6;i<8;i++){t1 = t1*10 + (d1[i]-'0');t2 = t2*10 + (d2[i]-'0');}int res = cul(y1,m1,t1,y2,m2,t2);cout<<res<<endl;}return 0;
}
宣传一下:song:《你能听到吗》 -T.O.P.