欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

日期差值(上交大复试上机题)笔记

程序员文章站 2024-02-17 11:59:10
...

题目描述

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

输入描述:

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

输出描述:

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

示例1

输入

20110412

20110422

输出

11

思路明确,直接上代码。

#include<bits/stdc++.h>
using namespace std;

int data[][12]{
	{31,28,31,30,31,30,31,31,30,31,30,31
	},{
	31,29,31,30,31,30,31,31,30,31,30,31
	}
}; 
int isLeapYear(int y){ //判断平闰年
	if(y%400==0||(y%4==0&&y%100!=0))
	return 1;
	return 0;
}
 int Number(int y,int m,int d){
 	//获得当前日期的所在天数 
 	int number = d;
	int t = isLeapYear(y);
	for(int i=0;i<m-1;i++){
			 	number += data[t][i];
			 }
	return number; 	
 }
 int numberofYear(int y){ //返回年份对应的天数
 	if(isLeapYear(y)) return 366;
 	return 365;
 }
int main(){
	
	string s1,s2;int y1,y2,m1,m2,d1,d2;
	while(cin>>s1>>s2){
		y1=y2=m1=m2=d1=d2=0;
		for(int i=0;i<4;i++) //得到年份 
			y1 = y1*10+s1[i]-'0';
		m1 = (s1[4]-'0')*10+s1[5]-'0';
		d1 = (s1[6]-'0')*10+s1[7]-'0';
		for(int i=0;i<4;i++) //得到年份 
			y2 = y2*10+s2[i]-'0';
		m2 = (s2[4]-'0')*10+s2[5]-'0';
		d2 = (s2[6]-'0')*10+s2[7]-'0';
		//cout<<y1<<" "<<m1<<" "<<d1<<endl;
				//cout<<y2<<" "<<m2<<" "<<d2<<endl;
		//获得两个日期各自的天数 
		int num1=Number(y1,m1,d1);
		int num2=Number(y2,m2,d2);
		int number=0;
		for(int i=y1;i<y2;i++){
			//计算两个日期中间差了几个整年
			 number = number + numberofYear(i);
		}	
		number = number + num2 - num1 + 1;
		cout<<number<<endl;
	
	}
}

 

相关标签: 机试