求任何两人生日相差天数的C++程序

 我来答
希茜Cqa68
2009-05-27 · TA获得超过1238个赞
知道小有建树答主
回答量:860
采纳率:0%
帮助的人:1076万
展开全部
#include <iostream>
using namespace std;
/*
求任何两人生日相差天数
*/
class date
{
public:
int year;
int month;
int day;
public:
date(int y=1,int m=1,int d=1):year(y),month(m),day(d){}
bool isleapyear ();
int getyeardays ();
int getmonthdays ();
int datetonum();
};

ostream &operator<<(ostream &out,const date &d);
istream &operator>>(istream &in,date &d);

bool date::isleapyear()
{
if(year%4==0 && year%100 !=0 || year%400==0) return true;
else return false;
}

int date::getyeardays()
{
if (isleapyear()) return 366;
else return 365;
}

int date::getmonthdays()
{
int n;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
n=31;
break;
case 4:
case 6:
case 9:
case 11:
n=30;
break;
case 2:
if(isleapyear()) n=29;
else n=28;
}
return n;
}

int date::datetonum()
{
int n=0;
int tempyear=year;
int tempmonth=month;
for (month=1;month<tempmonth;month++)
n+=getmonthdays();
for (year=1;year<tempyear;year++)
n+=getyeardays();
n+=day;
return n;
}

ostream &operator<<(ostream &out,const date &d)
{
out<<d.year<<"-"<<d.month<<"-"<<d.day<<endl;
return out;
}

istream &operator>>(istream &in,date&d)
{
int year,month,day;
cout<<" 输入年份: ";
cin>>year;
cout<<" 输入月份: ";
cin>>month;
cout<<" 输入天 : ";
cin>>day;
d=date(year,month,day);
return in;
}

void main()
{
date d1;
date d2;
int result=0;
cout<<"第一个人:"<<endl;
cin>>d1;
cout<<"二个人:"<<endl;
cin>>d2;
cout<<d1<<d2;

result=d1.datetonum()-d2.datetonum();
if(result<0)
result=-1*result;
cout<<"两人生日相差 "<<result<<" 天。"<<endl;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2009-05-27 · TA获得超过2326个赞
知道小有建树答主
回答量:419
采纳率:83%
帮助的人:218万
展开全部
//--------------------------------------------------
//楼主太小气
//--------------------------------------------------
#include <iostream>
using namespace std;
//--------------------------------------------------
class CDate
{
int day,month,year;
bool isLeapyear();
public:
CDate(int y,int m,int d);
friend int distance(CDate & d1);//这一天距离2000的天数
};
//--------------------------------------------------
bool CDate::isLeapyear()
{
return (year % 400 == 0)||(year % 4 == 0 && year % 100 != 0);
}
//--------------------------------------------------
CDate::CDate(int y,int m,int d):year(y),month(m),day(d){}
//--------------------------------------------------
int distance(CDate & d1)
{
int order = 0;
int increament = d1.isLeapyear();
switch(d1.month)
{
case 1: order = d1.day; break;
case 2: order = 31 + d1.day; break;
case 3: order = 59 + d1.day + increament;break;
case 4: order = 90 + d1.day + increament;break;
case 5: order = 120 + d1.day + increament;break;
case 6: order = 151 + d1.day+ increament;break;
case 7: order = 181 + d1.day+ increament;break;
case 8: order = 212 + d1.day+ increament;break;
case 9: order = 243 + d1.day+ increament;break;
case 10: order = 273 + d1.day+ increament;break;
case 11: order = 304 + d1.day+ increament;break;
case 12: order = 334 + d1.day+ increament;break;
}
return 365 * (d1.year - 2000) + (d1.year - 2000) / 4 + order;
}
//--------------------------------------------------
int main()
{
CDate d(2010,1,1);
CDate f(2009,7,7);
cout<<distance(d) - distance(f);
return 0;
}
//--------------------------------------------------
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萧然111
2009-05-27 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:106
采纳率:0%
帮助的人:0
展开全部
首先你要明白一点,对于任何两个人他们之间的差别不是别的,关键是有两点决定的,其一就是闰年还是平年的问题,必须要统计出这么一点,例如从1990到2009年之间其实就是先统计其间相差的年份,然后判断他们的相差时间,这是算整年的(这可以用个函数来实现,这就要看平年和闰年)再者就是看1990年的人的日期,和2009年人的日期,这样把问题就拉近了,再使用函数把这短几天的差距求出来不就行了!(也要注意平润年的差别)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式