前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法0基础刷题——日期计算

算法0基础刷题——日期计算

作者头像
秋名山码神
发布2022-12-13 14:21:22
4630
发布2022-12-13 14:21:22
举报
文章被收录于专栏:码神随笔

准备知识

刷完今天的题目,我感觉有以下需要掌握的知识

  1. 提取字符串 由于日期存储是一个字符串的形式,所以说要先提取年,月,日。 下面我们来说几个string的函数 s.substr(pos, n) //截取s中从pos开始(包括0)的n个字符的子串,并返回 用这个来截取年,月,日
  2. 返回字符串长度 s.size()或s.length(),返回无符号类型的数为字符串长度

解题报告

一周中的第几天

暴力解题:

代码语言:javascript
复制
    int days = 0,ret=0;
	switch (month)//以闰年举例
	{
	case 12:days += 30;
	case 11:days += 31;
	case 10:days += 30;
	case 9:days += 31;
	case 8:days += 31;
	case 7:days += 30;
	case 6:days += 31;
	case 5:days += 30;
	case 4:days += 31;
	case 3:days += 29;
	case 2:days += 31;
	default:break;
	}
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
	{
		days += day;
	}
	else//如果为平年且输入的月份大于2,则算出的天数需要减1
	{
			if (month > 2)
			{
				days--;
			}
		days += day;
	}
	days--;//计算与1971年1月1日的距离天数时,假设计算日期为1971年1月1日,间隔的天数应为1-1=0天,由此所得days-1才是正确解
	for (int i = 1971; i < year; i++)//计算1971年到year前一年经历的总天数
	{
		if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
		{
			days += 366;
		}
		else
		{
			days += 365;
		}
	}
	ret = days % 7;//计算所求日期与初始日期的差值
	switch (ret)
	{
	case 0: return "Friday"; break;
	case 1: return "Saturday"; break;
	case 2: return "Sunday"; break;
	case 3: return "Monday"; break;
	case 4: return "Tuesday"; break;
	case 5: return "Wednesday"; break;
	case 6: return "Thursday"; break;
	}

一年中的第几天

代码语言:javascript
复制
#include<iostream>
#include<string>
using namespace std;
int main()
{
	string d;
	cin >> d;
	int year = stoi(d.substr(0, 4));//截取年,月,日
	int month = stoi(d.substr(5, 2));
	int day = stoi(d.substr(8, 2));
	int months[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int res = 0;
	if ((year % 400 == 0) || ((year % 4 == 0) && year%100))
	{
		months[1] = 29;
	}

	for (int i = 1; i < month; ++i)
	{
		res += months[i - 1];
	}
	// cout << res << " " << day << endl;
	res += day;
	cout << res;
	return 0;
}

间隔天数 要求返回某年某日与某年某日的间隔天数,和上面的类似,多加了年份天数的计算。 坑:计算日子的差值要用到绝对值

代码语言:javascript
复制
public:
    int daysBetweenDates(string date1, string date2) {
        // 坑: 这里是绝对值
        return abs(date2day(date1) - date2day(date2));//调用abs函数
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备知识
  • 解题报告
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档