前言:补以前一个做错的题。
5360:
日期类Date包含日期的年、月、日三个数据成员,编写一个友元函数,求两个日期之间相差的天数。
输入输出说明:
输入:注意闰年的处理 2007 11 22 1975 4 2 输出: two date distance = 11922
#include<iostream> using namespace std; class date { int year,month,day; public : date(int year,int month,int day){ this->year=year; this->day=day; this->month=month; } date(){ } friend bool leap(int year); friend int countday(date &d,int flag); friend int subs(date &d1,date &d2 ); }; bool leap(int year){//计算是否闰年 if ((year % 4 == 0 && year % 100 != 0) || (year % 400) == 0) return true; else return false; } int countday(date &d,int flag){ int mon[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; int judge=leap(d.year); // cout<<judge<<endl; int sum=0; if(flag==1){ for(int i=0;i<d.month-1;i++){ sum+=mon[i]; if (i == 1 && judge) {sum += 1;}//闰年二月多出一天 } sum+=d.day+judge;//计算上2一年到这天的天数 } else{ for (int i = 11; i >= d.month - 1; i--) { sum += mon[i];//计算这天到下一年的天数 if (i == 1 && judge) sum += 1;//闰年二月多出一天 } sum -= d.day; } return sum; } int subs(date &d1,date &d2){//计算差的年的天数 int sum=0; sum+=countday(d1,1)+countday(d2,0); // cout<<sum<<endl; if(d1.year==d2.year){ int judge=leap(d1.year); sum-=(judge+365); } if(d1.year-d2.year>1){ for(int i=d2.year+1;i<=d1.year-1;i++){ if(leap(i)){ sum+=366; } else{ sum+=365; } } } return sum; } int main(){ int year1,month1,day1,year2,month2,day2; cin>>year1>>month1>>day1; cin>>year2>>month2>>day2; date d1(year1,month1,day1); date d2(year2,month2,day2); cout<<"two date distance = "<<subs(d1,d2)<<endl; }