Codeup——578 | 问题 A: 日期差值

题目描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

输入

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出

每组数据输出一行,即日期差值

样例输入

20130101
20130105

样例输出

5

思路:求日期的题,一种比较简单直接的方法就是将其中最小的那个日期的天数一直加1,直到两个日期相等为止。题中先定义一个二维数组,表示平年和闰年,平年用0表示,闰年用1表示。由于输入时不一定一开始输入的数y1比y2小,所以得进行判断,y2小的话则进行交换,用swap()函数比较方便,头文件是algorithm,后期我会介绍STL(C++标准模板库)。该题具体代码如下:

#include 
#include 
#include 
using namespace std;

int month[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
				  {1,31,29,31,30,31,30,31,31,30,31,30,31}};

int main()
{
	int y1,y2,m1,m2,d1,d2,sum,temp,flag;
	int t1,t2;
	while(scanf("%d%d",&t1,&t2)!=EOF){
		sum=1;
		if(t1>t2)
			swap(t1,t2);
		y1=t1/10000;m1=t1%10000/100;d1=t1%100;
		y2=t2/10000;m2=t2%10000/100;d2=t2%100;
		while(!(y1==y2&&m1==m2&&d1==d2)){
			flag=0;
			if(y1%4==0&&y1%100!=0||y1%400==0)
				flag=1;
			d1++;
			if(d1==(month[flag][m1]+1)){
				d1=1;
				m1++;
			}
			if(m1==13){
				m1=1;
				y1++;
			}
			sum++;
		}
		cout <<sum<<endl;
	}
	return 0;
} 

你可能感兴趣的:(Codeup)