题目描述:
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出:
每组数据输出一行,即日期差值
样例输入:
20130101
20130105
样例输出:
5
本文来自 xsj_blog 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xsj_blog/article/details/51988328?utm_source=copy
#include <iostream>
#include <string>
#include <cmath>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int month[13][2] = {{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30}, {31, 31}, {31, 31}};
bool comp(int y1, int m1, int d1, int y2, int m2, int d2)
{
if (y1 != y2)
{
return y1 > y2;
}
else if (y1 == y2 && m1 != m2)
{
return m1 > m2;
}
else if (y1 == y2 && m1 == m2 && d1 != d2)
{
return d1 > d2;
}
}
int ryear(int year)
{
if ( (year % 4 == 0 && year % 100 == 0) || year % 400 == 0)
{
return true;
}
else
{
return false;
}
}
int main()
{
string s1, s2;
cin >> s1 >> s2;
int y1, m1, d1, y2, m2, d2;
y1 = (s1[0] - '0') * 1000 + (s1[1] - '0') * 100 + (s1[2] - '0') * 10 + (s1[3] - '0');
m1 = (s1[4] - '0') * 10 + (s1[5] - '0');
d1 = (s1[6] - '0') * 10 + s1[7] - '0';
y2 = (s2[0] - '0') * 1000 + (s2[1] - '0') * 100 + (s2[2] - '0') * 10 + (s2[3] - '0');
m2 = (s2[4] - '0') * 10 + (s2[5] - '0');
d2 = (s2[6] - '0') * 10 + (s2[7] - '0');
bool ifcomp = false; //if y1 > y2
ifcomp = comp(y1, m1, d1, y2, m2, d2);
int tempy = 0;
int tempm = 0;
int tempd = 0;
if (ifcomp)
{
tempy = y1;
y1 = y2;
y2 = tempy;
tempm = m1;
m1 = m2;
m2 = tempm;
y2 = tempy;
tempd = d1;
d1 = d2;
d2 = tempd;
}//y1, m1, d1 < y2, m2, d2
int ty, tm, td = 0;
int ry = 0;
int total = 1;
while (y1 < y2 || m1 < m2 || d1 < d2)
{
d1++;
if (d1 == month[m1][ryear(y1)] + 1)
{
m1++;
d1 = 1;
}
if (m1 == 13)
{
y1++;
m1 = 1;
}
total++;
}
cout << total;
}
又遇到了输入输出问题,这道题只有当我输入20130101 20130105才有输出结果,输入其他,都没有输出结果。