prog7.cpp

来自「C++语言程序设计题典」· C++ 代码 · 共 87 行

CPP
87
字号
#include <stdio.h>
class Date
{
	int year;
	int month;
	int day;
public:
	Date(int y,int m,int d)
	{
		year=y;month=m;day=d;
	}
	void disp()
	{
		printf("%d.%d.%d",year,month,day);
	}
    friend int count_day(Date &d,int);
    friend int leap(int year);
	friend int subs(Date &d1,Date &d2);
};
int count_day(Date &d,int flag)
{
	static int day_tab[2][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 p,i,s;
    if (leap(d.year))
		p=1;
    else
	    p=0;
    if (flag)
    {
		s=d.day;
        for (i=1;i<d.month;i++)
			s+=day_tab[p][i-1];
	}
    else
	{
		s=day_tab[p][d.month]-d.day;
        for (i=d.month+1;i<=12;i++)
			s+=day_tab[p][i-1];
	}
    return(s);
}
int leap(int year)
{
    if (year%4==0 && year%100!=0 || year%400==0)  //是闰年
		return 1;
    else                                          //不是闰年
	    return 0;
}
int subs(Date &d1,Date &d2)
{
	int days,day1,day2,y;
    if (d1.year<d2.year)
    {
		days=count_day(d1,0);
        for (y=d1.year+1;y<d2.year;y++)
			if (leap(y))
				days+=366L;
	        else        
	            days+=365L;
        days+=count_day(d2,1);
	}
    else if (d1.year==d2.year)
	{
		day1=count_day(d1,1);
	    day2=count_day(d2,1);
	    days=day2-day1;
	}
	else
		days=-1;
	return days;
}
void main()
{
	Date d1(2000,1,1),d2(2002,10,1);
	int ds=subs(d1,d2);
	printf("输出结果:\n  ");
	if (ds>=0)
	{
		d1.disp();printf("与");
		d2.disp();printf("之间有%d天\n\n",ds);
	}
	else
		printf("时间错误!\n");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?