#include <iostream>
using namespace std;
const int DAYS[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
class CDate
{
private:
int year,month,day;
bool isleap(){
if(year%4==0 && year%100!=0||year%400==0) return true;
return false;
}
CDate add(int);
public:
void input();
void output() {cout<<year<<"年"<<month<<"月"<<day<<"日";}
int diff(CDate);
int compare(CDate dt){
if(year>dt.year) return 1;
if(year<dt.year) return -1;
if(month>dt.month) return 1;
if(month<dt.month) return -1;
if(day>dt.day) return 1;
if(day>dt.day) return -1;
return 0;
}
};
int main()
{
CDate date1,date2;
date1.input();
date2.input();
cout<<"给定的两个日期是:"<<endl;
date1.output(); cout<<endl;
date2.output(); cout<<endl;
int span=date1.diff(date2);
cout<<"两个日期的间隔天数:"<<span+1<<endl;
return 0;
}
void CDate::input(){
cout<<"请输入日期的年份:"; cin>>year;
cout<<"请输入日期的月份(1-12):"; cin>>month;
while(month<1 && month>12)
{
cout<<"输入月份错误,请重输。"; cin>>month;
}
cout<<"请输入日期的天数(1-31):";cin>>day;
int maxday=DAYS[month];
if(isleap() && 2==month) maxday=29;
while(day<1 && day>maxday)
{
cout<<"输入天数错误,请重输。"; cin>>day;
}
}
int CDate::diff(CDate date){
CDate former=*this,later=date;
int flag=compare(date);
if (0==flag) return 0;
if (0<flag){
former=date; later=*this;
}
int minday=(later.year-former.year-1)*366;
int maxday=(later.year-former.year+1)*366;
do{
int mid=(minday+maxday)/2;
CDate current=former.add(mid);
int flag=current.compare(later);
if(0==flag) break;
if(flag>0) maxday=mid-1;
else minday=mid+1;
}
while(true);
return (minday+maxday)/2;
}
CDate CDate::add(int n)
{
CDate dt=*this; dt.day=day+n;
while(true)
{
int mode=365;
if(dt.isleap())mode=366;
if(dt.day<=mode || dt.day>=1) break;
else
{dt.day-=mode;dt.year+=1;}
}
while(true)
{
int mode=DAYS[dt.month];
if(dt.isleap() && 2==dt.month) mode=29;
if(dt.day<=mode && dt.day>=1)break;
else
{
dt.day-=mode;dt.month+=1;
if(dt.month>12){dt.year+=1;dt.month=1;}
}
}
return dt;
}
本文来源:https://www.wddqw.com/doc/96c88fa60066f5335a81219c.html
正在阅读:
c++计算两个日期之间的间隔天数01-01
人民英雄纪念碑纪念碑碑文01-01
衡水一中2013-2014学年高一下学期第七次周练 数学试题 含答案01-01
论文JM代表什么01-01
高中语文 课外古诗文 _洵《彭州圆觉禅院记》原文及翻译01-01
二年级数学下册教学工作计划(苏教版)01-01
相同专业认定证明01-01
语文老师我想对你说作文3篇01-01
焦耳定律探究题01-01