刷完今天的题目,我感觉有以下需要掌握的知识
暴力解题:
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函数
}