定义一个日期类CDate,包含三个私有成员:year(年),month(月),day(日);有一个构造函数可以为其三个成员赋初值,以及一个友元函数Dis,可以计算两个日期相差的天数。在main函数中定义两个日期对象,计算两个日期相差的天数并输出完成测试。
1条回答 默认 最新
- threenewbee 2020-05-26 16:46关注
#include<iostream> using namespace std; class Date{ int day,month,year; public: Date(int y,int m,int d):year(y),month(m),day(d){} friend int count_day(Date &da,int flag); friend int leap(int year); friend int subs(Date &d1,Date &d2); }; int leap(int year){ //int year = da.year; if(year%4!=0) return 0; if(year%100!=0) return 1; if(year%400==0) return 1; return 0; } int count_day(Date &da,int flag){ int year = da.year; int temp = leap( year),sum=0; if(flag==1){ for (int i = 1; i < da.month;i++){ if(i==2){ if(temp) sum += 29; else sum += 28; continue; } switch(i){ case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : sum += 31; break; case 4 : case 6 : case 9 : case 11 : sum += 30; break; } } sum += da.day; }else{ for (int i = 12; i >=da.month;i--){ if(i==2){ if(temp) sum += 29; else sum += 28; continue; } switch(i){ case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : sum += 31; break; case 4 : case 6 : case 9 : case 11 : sum += 30; break; } } sum -= da.day; } return sum; } int subs(Date &d1,Date &d2){ int sum = 0; sum += count_day(d1, 0) + count_day(d2, 1); if((d1.year-d2.year)==0){ int flag = leap(d1.year); if(flag) sum -= 366; else sum -= 365; return sum; } if((d2.year-d1.year)>=2){ for (int i = d1.year + 1; i <=d2.year - 1;i++){ if(leap(i)) sum += 366; else sum += 365; } } return sum; } int main() { int d11, d22, m1, m2, y1, y2; cin >> y1 >> m1 >> d11 >> y2 >> m2 >> d22; if((y2-y1)<0||(m2-m1)<0||(d22-d11)<0){ cout << "time error!" << endl; }else{ Date d1(y1, m1, d11),d2(y2,m2,d22); cout << subs(d1, d2)<<endl; } //char kkk = getchar(); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报