牛客网KY222打印日期 牛客网KY258累加天数

题一:
打印日期_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/b1f7a77416194fd3abd63737cdfcf82b?tpId=69&&tqId=29669&rp=1&ru=/activity/oj&qru=/ta/hust-kaoyan/question-ranking

在完成此题之前需要先掌握一个C语言小知识点:

C++中%d 和 %04d有什么区别?
%d左对齐,输出变量的所有数字;%4d右对齐,宽度为4,左边填充空格,当变量的实际宽度大于4时,输出变量的所有数字;%04d与%4d的唯一区别就是左边填充0。例如
1)以%d,%4d,%04d,输出12时, 结果是:12,两个空格12, 0012。
2)以%d,%4d,%04d,输出123时, 结果是: 123,一个空格123,0123。
3)以%d,%4d,%04d,输出1234时,结果是: 1234,1234,1234。
4)以%d,%4d,%04d,输出12345时,结果是: 12345,12345,12345。

解析代码:

#include<iostream>
using namespace std;

int GetMonthDay(int year, int month)
{
	static int arr[13] = { 0, 31,28,31,30,31,30,31,31,30,31,30,31 };
	int day = arr[month];
	if (month == 2 && (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)))
	{
		day += 1;
	}
	return day;
}
void PrintMonthDay(int year,int dayCount)
{
	int month = 1;
	while (dayCount > GetMonthDay(year, month))
	{
		dayCount -= GetMonthDay(year, month);
		month++;
		if (month == 13)
		{
			year++;
			month = 1;
		}
	}
	printf("%04d-%02d-%02d\n", year, month, dayCount);
}
int main()
{
	int year, dayCount;
	while (cin >> year >> dayCount)
	{
		PrintMonthDay(year, dayCount);
	}
	return 0;
}

题二:

日期累加_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d?tpId=40&&tqId=31013&rp=1&ru=/activity/oj&qru=/ta/kaoyan/question-ranking 解析代码:

#include<iostream>
using namespace std;
class Date
{
public:
	Date(int year,int month,int day)
		:_year(year)
		,_month(month)
		,_day(day)
	{}
	int GetMonthDay(int year, int month)
	{
		static int arr[13] = { 0, 31,28,31,30,31,30,31,31,30,31,30,31 };
		int day = arr[month];
		if (month == 2 && (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)))
		{
			day += 1;
		}
		return day;
	}
	Date& operator+=(int day)
	{
		_day += day;
		while (_day > GetMonthDay(_year, _month))
		{
			_day -= GetMonthDay(_year, _month);
			_month++;
			if (_month == 13)
			{
				_year++;
				_month = 1;
			}
		}
		return *this;
	}
	void Print()
	{
		printf("%04d-%02d-%02d\n", _year, _month, _day);
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	int n = 0;
	int year, month, day;
	int days;
	cin >> n;
	while (n)
	{
		cin >> year >> month >> day;
		Date d1(year, month, day);
		cin >> days;
		d1 += days;
		d1.Print();
		n--;
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~|Bernard|

你的鼓励是我写下去最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值