问题:已经知道2000年1月1日是星期六。设计一个循环,输入一个新的日期,计算星期几。
考察怎么利用循环算两个日期之间的天数、如何算闰年。
①记忆闰年条件公式!!
(year%4==0&&year%100!=0)||year%400==0)
②记忆思路:计算 天数差 分为年、月、天来算。其中年月要走if计数循环,天直接减就ok。(详情见下)
#include <iostream>
using namespace std;
int main()
{
int year,month,day,y,m,d,bennian,theday,benyue;
bool flag;
cin>>year>>month>>day;
y=0;
m=0;
//以下是算年差,利用for一年一年的跳,中间插个if语句去区分闰年
for(int i=0;i<year-2000;i++){
bennian=i+2000;
flag={(bennian%4==0&&bennian%100!=0)||bennian%400==0};//算是否是闰年
if(flag) y=y+366;
else y=y+365;}//获得年天差y
//以下是算月差,for一个月一个月的跳,用switch区分31.30,29天
for(int o=0;o<month-1;o++){
benyue=1+o;
switch(benyue){
case 1:{if(month!=1) m=m+31;}break;
case 2:{if((year%4==0&&year%100!=0)||year%400==0)m=m+29;else m=m+28;}break;
case 3:m=m+31;break;
case 5:m=m+31;break;
case 7:m=m+31;break;
case 8:m=m+31;break;
case 10:m=m+31;break;
case 12:m=m+31;break;
case 4:m=m+30;break;
case 6:m=m+30;break;
case 9:m=m+30;break;
case 11:m=m+30;break;
default:;break;}//获得月天差m
}
//以下是算天差,简单
d=day-1;//获得天数差d
//定义总天数差
int all;
all=y+m+d;
//利用一周和7的一个循环去算
theday=6+all;
//switch分情况输出
switch(theday%7){//靠余数计算周几然后输出
case 0:cout<<"星期7";break;
case 1:cout<<"星期1";break;
case 2:cout<<"星期2";break;
case 3:cout<<"星期3";break;
case 4:cout<<"星期4";break;
case 5:cout<<"星期5";break;
case 6:cout<<"星期6";break;
default:;break;}
return 0;
}