日期处理-问题 E: 日期累加

题目描述
设计一个程序能计算一个日期加上若干天后是什么日期。

输入
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

输出
输出m行,每行按yyyy-mm-dd的个数输出。

样例输入
1
2008 2 3 100

样例输出
2008-05-13

AC代码:

#include<cstdio>

//平年和闰年每月的天数
const int Mon[13][2] = {
{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},
	  {31,31},{31,31},{30,30},{31,31},{30,30},{31,31}
};

//判断平年还是闰年
int isLeap(int year) {
	return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

int main()
{
	//用于输入
	int year, mon, day, days;
    int n;
    scanf("%d", &n); 
	while (n--) {
         
        scanf("%d %d %d %d", &year, &mon, &day, &days);
		
		while(days--){
			day++;
			if(day == Mon[mon][isLeap(year)] + 1){
				day = 1;
				mon++;
			}
			if(mon == 13){
				mon = 1;
				year++; 
			}
		}
		//%0md指不足m位用0补齐
		printf("%04d-%02d-%02d\n", year, mon, day);
	}
	return 0;
}

收获:
1.在告诉你具体日期问你经过多少天后的日期,直接从这天往后加
在加的过程中调正日月年即可
2.而只告诉你年和天数,这就需要天数循环减去当月天数,
直到天数小于当月天数,这时的数值就等于day,而year和mon
还是在循环中累加
区别:这两种情况在于计算day的不同,前者是知道具体日期
只需在加的过程中调整,后者不知道具体日期就用减的方式
从前往后逼近

第二种情况的题目链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(1) 测试日期类成员函数,在主函数中列出菜单选项,可以完成日期的加减比较等测试功能。 (2) 完善程序功能,在日期相加的菜单选项中增加日期加天数,结果为新日期日期家月份,结果为新日期,要考虑闰年情况。 (3) 完善程序功能,在日期相减的菜单选项中增加日期减天数,结果为新日期日期减月份,结果为新日期,要考虑闰年情况。 (4) 显示日期时增加显示星期及英文形式的月份的功能。 (5) 增加输入的甄别功能,即输入非法数据(如负数、日期超过31天、时间超过24小时等情况)的识别显示功能。 (1) 仿照日期类编写时间类CTime_t,可以完成时间的设置、运算、比较等功能。 (2) 增加时间的输入功能,既可以选择输入格式,可以输入hh:mm:ss格式的信息。 (3) 增加时间的输出格式,可以输出12小时的时间格式。 (4) 编写时间和日期的派生类CDati,完成日期与时间的联合设置、运算、比较等功能,要求该派生类可以完成:日期时间加天数或时间等于新的日期时间,日期时间减天数或等于新的日期时间,两个日期时间相减等于天数或时间等工作,在程序中考虑闰年等具体情况,并重载各种运算符。 (5) 增加输入的甄别功能,即输入非法数据,即输入非法数据(如负数、日期超过31天、时间超过24小时等情况)的识别显示功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值