Day of Week 九度教程第7题 求某一天是周几

本文介绍了一种将任意日期转换为星期几的算法实现。通过确定原点日期,计算目标日期与原点日期之间的天数差,利用此差值与当前星期几结合,即可准确得到目标日期对应的星期。代码中详细展示了如何处理平年与闰年的月份天数,以及如何通过模运算确定星期。

题目链接
题目大意:
输入一个日期,要求输出该日期为星期几。

解题思路:
先确定原点日期,然后我们只需要求出所给的日期与今天的日期相隔了几天,将差值对7求余数,再根据今天是星期几,便能得出答案。
AC代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
using namespace std;
#define isyeap(x) (x % 100 !=0 && x % 4 == 0 ) || x % 400 == 0  ? 1 : 0
struct date {
	int year;
	string month;
	int day;
};
int daysofmonth[2][13] = { { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };
string month[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
string week[7] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int count(date a) {
	int mycount = 0;
	for (int i = 0; i < a.year; i++) {
		if (isyeap(i)) mycount += 366;
		else mycount += 365;
	}
	int thismonth;
	for (int i = 0; i < 12; i++) {
		if (month[i] == a.month) {
			thismonth = i + 1 ;
			break;
		}
	}
	for (int i = 0; i < thismonth; i++) {
		if (isyeap(a.year)) {
			mycount += daysofmonth[0][i];
		}
		else mycount += daysofmonth[1][i];
	}
	mycount += a.day;
	return mycount;
}
int main() {
	date today;
	today.year = 2019;
	today.month = "September";
	today.day = 2;
	int todayofweek = 1;
	int num2 = count(today);
	date a;
	while (cin>>a.day>>a.month>>a.year) {
		int num1 = count(a);
		int num3 = (num1 - num2);
		int t = ((num3 % 7) + 7) % 7;
		cout << week[t] << endl;
	}
	return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值