判断是否是工作日,不考虑节假日
程序员文章站
2022-05-16 18:50:22
...
小陆所在的公司实行周末单双休,即一周只休周日,下一周休周六日,如此轮换。已知2016年8月13-14日是双休,输入年月日,以yyyymmdd的格式,如20160814,输出当天是否休息,(不考虑法定节假日)
要求:不能使用时间、日期相关的库函数
#include<iostream>
#include<string>
using namespace std;
int main(){
string inputString;
long date;
cin>> inputString;
int year,month,day;
int pos = 0;
//去除字符串中的逗号
while((pos=inputString.find(","))!=-1){
inputString.erase(pos,1);
}
//将字符串转换为10进制int型
date = stoi(inputString,0,10);
//从日期中提取年月日
year=date/10000;
month=date%10000/100;
day=date%100;
int weekAfter[7] = {0,1,2,3,4,5,6};
int weekBefore[7] = {0,6,5,4,3,2,1};
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
//判断闰年
if(year%100!=0&&year%4==0||year%400==0)
mon[1]=29;
else
mon[1]=28;
int dou=2; //记录单休双休,0双休,1单休
int zhou=7; //记录是周几,7周日
int t=0; //记录week中的下标
if(date>20160814) //双休周日
{
while(year!=2016||month!=8||day!=14){
day--;
t++;
if(month > 8 && day<1){
day=mon[month];
month--;
}else if(year > 2016 && month<1){
year--;
month=12;
if(year%100!=0&&year%4==0||year%400==0)
mon[1]=29;
else
mon[1]=28;
}
}
printf("%d\n",t);
if(t%7!=0){
dou=t/7+1;
}else{
dou=t/7;
}
dou=dou%2; //0为双休1为单休
zhou=weekAfter[t%7]; //周几,0为周日,6周六,5周五……
}else if(date<20160814){ //20160814之前
while(year!=2016||month!=8||day!=14){
day++;
t++;
if(day > mon[month]){
month++;
day=1;
}else if(month>12){
year++;
month=1;
if(year%100!=0&&year%4==0||year%400==0)
mon[1]=29;
else
mon[1]=28;
}
}
if(t%7!=0){
dou=t/7;
}else{
dou=t/7;
}
dou=dou%2; //0为双休1为单休
zhou=weekBefore[t%7]; //周几,0为周日
}else{
dou = 0;
zhou = 0;
}
if(dou==1){ //单休
if(zhou!=0) //不是周日
cout<<"工作"<<endl;
else
cout<<"休息"<<endl;
}else if(dou==0){ //双休
if(zhou==0||zhou==6){ //是周日或周六
cout<<"休息"<<endl;
}else
cout<<"工作"<<endl;
}
}
上一篇: 判断某一天是否是节假日