#include <iostream>
#include <vector>
using namespace std;
typedef struct Info_
{
short int year;
short int month;
short int day;
}Info;
/*是闰年?*/
bool RR(int year)
{
if( (year % 4 == 0 && year % 100 == 0) || (year % 400 == 0) )
{
return true;
}
return false;
}
static vector<Info> v;
class Date
{
private:
Info data;
int runday;
public:
Date(int _runday=0)
{
runday = _runday;
data = v[runday];
}
Date(int year, int month, int day)
{
runday = year*360;
while( !(v[runday].year == year && v[runday].month == month && v[runday].day == day))
{
++runday;
}
data = v[runday];
}
static void Init()
{
int i,j,k;
Info info;
bool flag; //闰年标志
for(i=0; i<= 9999; ++i)//年份
{
flag = RR(i);
for(j=1; j<=12; ++j)
{
for(k=1; k<=31; k++)
{
// 4 6 9 11 为小月 30天
if(((j==4)||(j==6)||(j==9)||(j==11)) && (k == 31) )
{
break; //跳出这月
}
//2月般的...
else if (j == 2)
{
if(flag)//闰年
{
if(k>29)
break;//跳到下一个月
}
else//不是闰年
{
if(k>28)
break;//跳到下一月
}
}
/**/
info.year = i;
info.month = j;
info.day = k;
v.push_back(info);
}
}
}
}
void display()
{
cout<<data.year<<"-"<<data.month<<"-"<<data.day<<endl;
}
Date operator -(Date d)
{
return Date((this->runday) - d.runday);
}
Date operator +(Date d)
{
return Date((this->runday) + d.runday);
}
};
int main(int argc, char *argv[])
{
Date::Init();
(Date(11, 1, 20) - Date(0, 1, 3)).display();
return 0;
}
如果是固化的话, 那个 init可以先在 PC之类的算好,存在文件就好