算法0基础刷题——日期计算
2023-02-18 16:26:27 时间
准备知识
刷完今天的题目,我感觉有以下需要掌握的知识
- 提取字符串 由于日期存储是一个字符串的形式,所以说要先提取年,月,日。 下面我们来说几个string的函数 s.substr(pos, n) //截取s中从pos开始(包括0)的n个字符的子串,并返回 用这个来截取年,月,日
- 返回字符串长度 s.size()或s.length(),返回无符号类型的数为字符串长度
解题报告
暴力解题:
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;
}
#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;
}
间隔天数 要求返回某年某日与某年某日的间隔天数,和上面的类似,多加了年份天数的计算。 坑:计算日子的差值要用到绝对值
public:
int daysBetweenDates(string date1, string date2) {
// 坑: 这里是绝对值
return abs(date2day(date1) - date2day(date2));//调用abs函数
}
相关文章
- 深入理解计算机系统-第1章计算机系统漫游笔记
- 深入理解计算机系统-第2章信息的表示和处理
- 深入理解计算机系统-第3章程序的机器级表示
- GitHub星标1k+的C#/.NET/.NET Core学习、工作、面试指南(让现在的自己不再迷茫✨)
- C#/.NET/.NET Core面试宝典(基础版)
- 全面的Docker快速入门教程
- 微信公众号开发之H5页面跳转到指定的小程序
- 最全面的C#/.NET/.NET Core学习视频汇总
- uni-app&H5&Android混合开发一 || 最全面的uni-app离线打包Android平台教程
- 将Js数组对象中的某个属性值升序排序,并指定数组中的某个对象移动到数组的最前面
- 【最全面】SourceTree使用教程详解(连接远程仓库,克隆,拉取,提交,推送,新建/切换/合并分支,冲突解决,提交PR)
- 全面概述Gitee和GitHub生成/添加SSH公钥
- Layui-admin-iframe通过页面链接直接在iframe内打开一个新的页面,实现单页面的效果
- 微信公众号支付提示当前页面的URL未注册
- 【FAQ】应用内支付服务无法拉起支付页面常见原因分析和解决方法
- Java面试题之:raft 协议和 zab 协议区别
- 租房“免押金”大面积落地,年底租房人群迎来一点甜
- 简单描述 MySQL 中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响(从读写两方面)
- 面试官问:Stream 中的 map、peek、foreach 方法的区别?彻底懵了。。
- 广电5G:“农村包围城市”还是内容创新为王?