欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

判断是否是工作日,不考虑节假日

程序员文章站 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;
    }
}