C++编程1、若已知具体某一天(年、月、日,如2018年1月1日)为星期几,利用该已知信息分

1、若已知具体某一天(年、月、日,如2018年1月1日)为星期几,利用该已知信息分析和判断其他任意一天(年、月、日)是星期几,并输出判断结果。有关说明如下:(1)满足下述... 1、若已知具体某一天(年、月、日,如2018年1月1日)为星期几,利用该已知信息分析和判断其他任意一天(年、月、日)是星期几,并输出判断结果。有关说明如下:
(1)满足下述条件之一均为闰年:年份数可被400整除;年份数可被4整除但不能被100整除。
(2)闰年的天数比非闰年(平年)多1天(闰年366天,非闰年365天)。1~12月的各月份的天数依次为31、28(闰年为29)、31、30、31、30、31、31、30、31、30、31。
很急
展开
 我来答
microroom
科技发烧友

2018-04-29 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1646万
展开全部
#include<iostream>

using namespace std;

class Date
{
public:
Date(int y,int m,int d,int w=-1)
{
this->y=y;
this->m=m;
this->d=d;
this->w=w;
}
//判断这一年是不是闰年
static bool isLeapYear(int year)
{
return (0==year%400 || (0==year%4 && 0!=year%100));
}
void setDate(int y,int m,int d)
{
this->y=y;
this->m=m;
this->d=d;
}
void outputDateString() const
{
cout<<y<<"年"<<m<<"月"<<d<<"日"<<getWeekString()<<endl;
}
//计算今天是这一年的第多少天
int calculateDays() const
{
static const int Days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,s;

s=d;
for(i=0;i<m-1;i++)
s+=Days[i];
if(m>2 && Date::isLeapYear(y))
s+=1;
return s;
}
//通过另一个有有效的星期部分的日期对象,计算今天是星期几
void calculateWeek(const Date &date1)
{
int i,sum,sum1,cha;

if(-1==date1.w)
cout<<"calculateWeek:参数错误!参数须有有效的星期部分。"<<endl;
else
{
sum=calculateDays();
sum1=date1.calculateDays();
//cout<<"sum="<<sum<<";sum1="<<sum1<<endl;
if(y==date1.y)
{
cha=sum-sum1;
//cout<<"cha:"<<cha<<endl;
if(cha>=0)
setWeek((date1.w+cha%7)%7);
else
{
cha=-cha;
setWeek((7+date1.w-cha%7)%7);
}
}
else
{
cha=0;
if(date1.y<y)
{
cha=(date1.isLeapYear(date1.y) ? 366 : 365)-sum1;
for(i=date1.y+1;i<y;i++)
{
cha+=365;
if(Date::isLeapYear(i))
cha+=1;
}
cha+=sum;
//cout<<"cha:"<<cha<<endl;
setWeek((date1.w+cha%7)%7);
}
else
{
cha=(isLeapYear(y) ? 366 : 365)-sum;
for(i=y+1;i<date1.y;i++)
{
cha+=365;
if(Date::isLeapYear(i))
cha+=1;
}
cha+=sum1;
//cout<<"cha:"<<cha<<endl;
setWeek((7+date1.w-cha%7)%7);
}
}
}
}
string getWeekString() const
{
static const string WK[7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

if(-1!=w)
return WK[w];
else
return "星期未设定!";
}
void setWeek(int w)
{
if(w>=0 && w<=6)
this->w=w;
else
cout<<"setWeek:参数错误!星期只能设置成0到6的数字。"<<endl;
}
private:
int y,m,d,w;
};
int main()
{
int y,m,d,w;

//测试用//
/*Date dt1(2018,4,11,3);
Date dt2(0,0,0);
while(true)
{
cout<<"请输入年、月、日(输入-1退出测试):";
cin>>y;
if(-1==y)
break;
cin>>m>>d;
dt2.setDate(y,m,d);
dt2.calculateWeek(dt1);
dt2.outputDateString();
}*/
//测试用//

cout<<"请输入年、月、日、星期几(用数字表示,0-星期日,1-星期一,以此类推):";
cin>>y>>m>>d>>w;
Date d1(y,m,d,w);

cout<<"请输入年、月、日:";
cin>>y>>m>>d;
Date d2(y,m,d);

d2.calculateWeek(d1);
d2.outputDateString();
return 0;
}
DoramiHe
推荐于2018-04-29 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25332 获赞数:59543
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
1.查查公元元年1年1月1日是星期几2.懂得计算某一年是否闰年
3.根据你输入的年份,结合闰年算法,计算输入年份的元旦离公元元年元旦有几天,并根据这个计算输入年份元旦是星期几
4.计算输入年份是否闰年
5.按月份,输出月历,12个就是年历了,或者说是这年的日历。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式