给定日期,判断星期几(日期问题)

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <map>
#include <stack>
using namespace std;

int type(int n) {
    // 四年一润 百年不润   四百年又润
    if((n % 4 == 0 && n % 100 != 0) || n % 400 == 0) {
        return 1;
    }
    return 0;
}

int b[2] = {365, 366};
int d[2][13] = {
    0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
    0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};


void setIntFromString(string& s, int& year, int& month, int& day) {
    string sub = s.substr(0, 4); //pos,len
    year = atoi(sub.c_str());
    sub = s.substr(4, 2); //pos,len
    month = atoi(sub.c_str());
    sub = s.substr(6, 2); //pos,len
    day = atoi(sub.c_str());
    return ;
}


int getDays(int year, int month, int day) {
    int days = 0;
    // 注意是小于等于
    for (int i = 1; i < year; i++) {
        days += b[type(i)];
    }
    for (int i = 1; i < month; i++) {
        days += d[type(year)][i];
    }
    days += day;
    return days;
}

void swap(int& a, int& b) {
    int t;
    t = a;
    a = b;
    b = t;
}

int main() {
    string s1;
    string s2;
    int y1, m1, d1;
    int y2, m2, d2;
    cin >> s1; //19970225
    s2 = "20200113"; // xq1
    setIntFromString(s1, y1, m1, d1);
    setIntFromString(s2, y2, m2, d2); // 2020 01 13 xq1

    int res = getDays(y1, m1, d1) - getDays(y2, m2, d2); //我要计算 我输入的s1 与 20200113的距离
    //正数代表在20200113之后,负数代表在20200113之前
    cout << res << endl;
    // 基准 20200113 0 xq1
    // 20200112 -1 xq7
    // 20200111 -2 xq6

    // 20200114 1 xq2
    // 20200115 2 XQ3

    string s[7] = {"XQ1", "XQ2", "XQ3", "XQ4", "XQ5", "XQ6", "XQ7"};
    int xq = (res % 7 + 7) % 7;

    cout << xq << endl;
    cout << s[xq] << endl;
}



/*
//写法2:
int main() {
    string s1;
    string s2;
    int y1, m1, d1;
    int y2, m2, d2;
    cin >> s1; //19970225
    s2 = "00010101"; // xq1
    setIntFromString(s1, y1, m1, d1);
    setIntFromString(s2, y2, m2, d2);

    int res = getDays(y1, m1, d1) - getDays(y2, m2, d2);
    cout << res << endl;

    string s[7] = {"XQ1", "XQ2", "XQ3", "XQ4", "XQ5", "XQ6", "XQ7"};
    int xq = res % 7;

    cout << xq << endl;
    cout << s[xq] << endl;
}


*/

版本2

#include <iostream>
#include <cmath>
using namespace std;

int days[2][13] = {

	{0,31,28,31,30,31,30,31,31,30,31,30,31},
	{0,31,29,31,30,31,30,31,31,30,31,30,31},
};

int all[2] = {365,366};

string month[13] = { "0" , "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
string xq[8] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"};

int type(int n) {
	if ( (n % 4 == 0 && n % 100 != 0) || n % 400 == 0) {
		return 1;
	}
	return 0;
}



int convertToInt(string s) {
	for (int i = 1; i <= 12; i++) {
		if (s == month[i]) {
			return i;
		}
	}
}


int getDays(int year,int month,int day) {
	int sum = 0;
	for (int i = 1 ; i < year ; i++) {
		sum += all[type(i)];
	}

	for (int i = 1 ; i < month ; i++) {
		sum += days[type(year)][i];
	}
	sum += day;
	return sum;
}

int main() {
	int day,month,year;
	string s;
	while(cin >> day >> s >> year) {
		month = convertToInt(s);

		int a1 = getDays(year,month,day);
		int a2 = getDays(2020,2,24); // xq 1
		int res = a1 - a2;

		// 注意  -1 % 7 == -1
		int xqNum =  (res % 7 + 7) % 7;
		cout << xq[xqNum] << endl;
	}



}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值