复旦19考研机试真题(1)--日期问题

题目:
输入日期格式:YYYYMMDD,求与20190205相隔的天数。
例:
输入:

20190208

输出:

3

分析:输入的日期可能在20190205之前,也可能在之后;先判断大小;再计算相隔天数; 假设在前面的日期为yyyymmdd,后面的日期为YYYYMMDD;先计算出yyyy0101到yyyymmdd相隔的天数;再计算出yyyy0101到YYYYMMDD相隔的天数;之后相减,即为所求相隔天数;

#include<iostream>  
using namespace std; 
int days[2][13] = { 
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
bool isRun(int y) {
	if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
		return 1;
	else
		return 0;
}
int main() { 
	int y,m,d,Y=2019,M=2,D=5, g1=0, g2=0;
	scanf("%4d%2d%2d", &y, &m, &d);
	if (y > 2019 || (y == 2019 && m > 2) || (y == 2019 && m == 2 && d > 5)) {
		Y = y, M = m, D = d;
		y = 2019, m = 2, d = 5;
	}
	for (int i = 1; i < m; i++)
		g1 += days[isRun(y)][i];
	g1 += d;
	for (int i = y; i < Y; i++)
		g2 += isRun(y)==1 ? 366 : 365;
	for(int i =1; i<M; i++)
		g2 += days[isRun(Y)][i];
	g2 += D;
	printf("%d", g2 - g1);
	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值