Day05 日期类OJ题目
计算日期到天数转换_牛客题霸_牛客网根据输入的日期,计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶:时。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/4938575031726974727572
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n) O(n) ,空间复杂度:O(1) O(1)
输入描述:
输入一行,每行空格分割,分别是年,月,日
输出描述:
输出是这一年的第几天
#include <iostream>
using namespace std;bool IsLeapYear(int year) // 闰年判断
{if(((year%4 == 0 && 0 != year%100) || (0 == year%400)))return true;return false;
}int GetDayofYear(int year, int month, int day)
{int days = 0; // 用于返回结果int DayOfMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };for(int i = 1; i < month; i++) // 将当前月份之前所有day加上{days += DayOfMonth[i];if(i == 2 && IsLeapYear(year)) // 若是闰年 加一天days+=1;}days += day;return days;
}int main()
{int year, month, day;while(cin>>year>>month>>day){cout << GetDayofYear(year, month, day) <<endl;}return 0;
}
日期差值_牛客题霸_牛客网有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/4938575031726976288481
描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
输入描述:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出描述:
每组数据输出一行,即日期差值
示例1
输入:
20110412 20110422
输出:
11
#include <iostream>
using namespace std;class Date
{public:bool Isleap(int year){if((year%4==0 && year%100!=0) || year%400==0)return true;elsereturn false;}int Getday(int year, int month){int arr[13] = {0, 31, 28, 31,30,31,30,31,31,30,31,30,31};int day = arr[month];if(Isleap(year) && month == 2)day += 1;return day;}Date(int year = 2022, int month = 12, int day = 8): _year(year), _month(month), _day(day){if(!((year>0) && (month>0 && month<=12) && (day>0 && day<=Getday(year, month)))){cout<<"输入的日期不正确,即将将日期重新初始化为默认日期"<<endl;_year = 2022;_month = 12;_day = 8;}}Date(const Date& d){_year = d._year;_month = d._month;_day = d._day;}// Date operator+(int day)// {// Date temp(*this);// temp._day += day;// int GetDay = 0;// while(temp._day > (GetDay = Getday(temp._year, temp._month)))// {// temp._day -= GetDay;// temp._month += 1;// if(temp._month == 13)// {// temp._month = 1;// temp._year += 1;// }// }// return temp;// }Date operator+(int day){// 因为 + 不改变左右参数的值,所以可以使用一个临时变量来存储并返回所得的结果。Date temp(*this);temp._day += day;// 当这个天数不合法时循环继续int Daysofmonth = 0;while (temp._day > (Daysofmonth = Getday(temp._year, temp._month))){// _day 减去本月的天数temp._day -= Daysofmonth;// _month 后移一月temp._month += 1;// 对月数格式检测是否合法,如果到13月了 直接转入1月if (temp._month == 13){temp._month = 1;temp._year += 1;}}return temp;}bool operator>(Date d){if(_year>d._year || (_year==d._year && _month>d._month) || (_year==d._year && _month==d._month && _day>d._day))return true;elsereturn false;}bool operator==(Date d){return (_year==d._year && _month==d._month && _day==d._day);}bool operator!=(Date d){return !(*this==d);}// int operator-(Date d)// {// Date maxdate(*this);// Date mindate(d);// if(mindate>maxdate)// {// maxdate = d;// mindate = *this;// }// int count = 0;// while(maxdate != mindate)// {// mindate = mindate + 1;// count++;// }// return count;// }int operator-(const Date& d){Date maxdate(*this);Date mindate(d);if (mindate > maxdate){maxdate = d;mindate = *this;}int count = 0;while (mindate != maxdate){count++;mindate = mindate + 1;}return count;}private:int _year;int _month;int _day;
};int main() {// char s1[8], s2[8];// cin>>s1>>s2;// char s1_year[4], s2_year[4];// for(int i = 0; i < 4; ++i)// {// s1_year[i] = s1[i];// s2_year[i] = s2[i];// }// char s1_month[2], s2_month[2];// for(int i = 4; i < 6; ++i)// {// s1_month[i] = s1[i];// s2_month[i] = s2[i];// }// char s1_day[2], s2_day[2];// for(int i = 4; i < 6; ++i)// {// s1_day[i] = s1[i];// s2_day[i] = s2[i];// }// Date d1(atoi(s1_year), atoi(s1_month), atoi(s1_day));// Date d2(atoi(s2_year), atoi(s2_month), atoi(s2_day));int time1,y1,m1,d1;int time2,y2,m2,d2;scanf("%d%d",&time1,&time2);if(time1 > time2){int temp = time1;time1 = time2;time2 = temp;}y1 = time1/10000;m1 = time1%10000/100;d1 = time1%100;y2 = time2/10000;m2 = time2%10000/100;d2 = time2%100;Date D1(y1, m1, d1);Date D2(y2, m2, d2);int day = D1 - D2;cout<<day+1<<endl;}
// 64 位输出请用 printf("%lld")
打印日期_牛客题霸_牛客网给出年分m和一年中的第n天,算出第n天是几月几号。。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/4938575031726985648236
描述
给出年分m和一年中的第n天,算出第n天是几月几号。
输入描述:
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
输出描述:
可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
示例1
输入:
2000 3 2000 31 2000 40 2000 60 2000 61 2001 60
输出:
2000-01-03 2000-01-31 2000-02-09 2000-02-29 2000-03-01 2001-03-01
#include <iostream>
using namespace std;
#include <stdio.h>bool Isleap(int year) 判断闰年{if((year%4==0 && year%100!=0) || year%400==0)return true;elsereturn false;}int getday(int year, int month) 获取该年该月天数
{int arr[13] = {0, 31, 28, 31,30,31,30,31,31,30,31,30,31};int day = arr[month];if(month == 2 && Isleap(year))return day+1;elsereturn day;
}int main() {int _year, _day;while (scanf("%d %d", &_year, &_day) != EOF) { int month = 1;int day = getday(_year, month); 用给出的_day每次减去当月while(_day > day) 若_day小于day则就在该月{ 否则就是在后面月份,更新_day 和 month_day -= day;month++;day = getday(_year, month);}printf("%d-%02d-%02d\n", _year, month, _day);}return 0;
}
// 64 位输出请用 printf("%lld")
日期累加_牛客题霸_牛客网设计一个程序能计算一个日期加上若干天后是什么日期。。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/4938575031726985933191
描述
设计一个程序能计算一个日期加上若干天后是什么日期。
输入描述:
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
输出描述:
输出m行,每行按yyyy-mm-dd的个数输出。
示例1
输入:
1 2008 2 3 100
输出:
2008-05-13
#include <iostream>
using namespace std;
#include<stdio.h>bool Isleapyear(int year)
{if((year%4==0 && year%100!=0) || year%400==0)return true;return false;
}int GetDay(int year, int month)
{int arr[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};int day = arr[month];if(Isleapyear(year) && month==2)return day+1;elsereturn day;
}void Date(int _year, int _month, int _day, int day)
{_day += day;while(_day > GetDay(_year, _month)){_day-=GetDay(_year, _month);_month+=1;if(_month==13){_year+=1;_month=1;}}printf("%d-%02d-%02d\n", _year,_month,_day);
}int main() {int n,_year,_month,_day,day;cin>>n;for(int i = 0; i < n; ++i){cin>>_year>>_month>>_day>>day;Date(_year,_month,_day,day);}
}
// 64 位输出请用 printf("%lld")