日期差值(上交大复试上机题)笔记
程序员文章站
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;
}
}
推荐阅读