在右侧编辑器中的Begin-End之间补充代码,计算输入数据年月份的1号是星期几并返回(周一到周日分别返回整数1到7)。
其中该函数的参数为输入的两个整数数据:年和月。
官方代码:
#include <iostream>
using namespace std;
// 函数leapYear
int leapYear(int y)
{
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return 1;
return 0;
}
// 函数whatDay:计算某年某月某日是星期几
// 参数:year-年,month-月
// 返回值:--7分别表示星期一到星期日
int whatDay(int year, int month)
{
// 请在这里补充代码,实现函数whatDay
/********** Begin *********/
// 1年月日是星期一
int w = 1;
int i;
// 1到year-1都是全年
for(i = 1; i < year; i++)
{
if(leapYear(i))
w += 366;
else
w += 365;
}
switch(month)
{
case 12:
w += 30;
case 11:
w += 31;
case 10:
w += 30;
case 9:
w += 31;
case 8:
w += 31;
case 7:
w += 30;
case 6:
w += 31;
case 5:
w += 30;
case 4:
w += 31;
case 3:
if(leapYear(year))
w += 29;
else
w += 28;
case 2:
w += 31;
case 1: // 1月不加了
;
}
w = w % 7; // 得到-6,其中为星期天
// 调整星期天
if(w == 0)
w = 7;
return w;
/********** End **********/
}
int main()
{
int y, m, xq; // 年、月、星期几
cin >> y >> m; // 输入年月
xq = whatDay(y,m); // 计算星期几
cout << y << "年" << m << "月1日是星期"; // 输出星期
if(xq == 7)
cout << "日" << endl;
else
cout << xq << endl;
return 0;
}
我觉得这样一个月一个月的加有一丢丢的麻烦,下面是我自己的代码
#include <iostream>
using namespace std;
// 函数leapYear
int leapYear(int y)
{
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return 1;
return 0;
}
// 函数whatDay:计算某年某月某日是星期几
// 参数:year-年,month-月
// 返回值:--7分别表示星期一到星期日
int whatDay(int year, int month)
{
// 请在这里补充代码,实现函数whatDay
/********** Begin *********/
int yu;
yu=1;
int i;
for (int i=1;i<year;++i){
if(leapYear(i)){
yu+=366;
}
else{
yu+=365;
}
}
if (month==2){
yu+=31;
}
else if(month>2){
if(leapYear(year)){
yu+=31;//一月份的天数
yu+=29;//闰年二月份的天数
yu=yu+(30*(month-3)+int((month-3)/2));
}
else{
yu+=31;//一月份的天数
yu+=28;//平年二月份的天数
yu=yu+(30*(month-3)+int((month-3)/2));
}
}
if(month>8){
yu+=1;//如果月份晚于八月,八月有31天,所以天数要加上除30天外额外的一天
}
int rt;
rt=yu%7;
if(rt==0){
return 7;
}
else{
return rt;
}
/********** End **********/
}
int main()
{
int y, m, xq; // 年、月、星期几
cin >> y >> m; // 输入年月
xq = whatDay(y,m); // 计算星期几
cout << y << "年" << m << "月1日是星期"; // 输出星期
if(xq == 7)
cout << "日" << endl;
else
cout << xq << endl;
return 0;
}
有没有更好的方法呢?