AcWing 3218. 日期计算

问题描述

给定一个年份 y 和一个整数 d,问这一年的第 d 天是几月几日?

注意闰年的 2 月有 29 天。

满足下面条件之一的是闰年:

  1. 年份是 4 的整数倍,而且不是 100 的整数倍;
  2. 年份是 400 的整数倍。

输入格式:

输入的第一行包含一个整数 y y y,表示年份,年份在 1900 1900 1900 2015 2015 2015 之间(包含 1900 1900 1900 2015 2015 2015)。

输入的第二行包含一个整数 d d d d d d 1 1 1 365 365 365之间。

输出格式:

输出两行,每行一个整数,分别表示答案的月份和日期。

数据范围

1900 ≤ y ≤ 2015 1900≤y≤2015 1900y2015,
1 ≤ d ≤ 365 1≤d≤365 1d365

输入样例1:

2015
80

输出样例1:

3
21

输入样例2:

2000
40

输出样例2:

2
9

思路

1、判断闰年得到2月的天数
2、模拟翻日历即可

原题链接

C++代码:

#include <iostream>

using namespace std;

//0用来占位 其他的用来模拟日历
int months[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,d;


//得到每一个月的天数
int getDay(int year,int month)
{
    if(month != 2) return months[month];
    else{
        int leap = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
        return 28 + leap;
    }
}

//给定年月日,经过n天后对应的日期
void pass(int y,int n)
{
    //模拟第几天
    int d = 0;
    //模拟月份
    int m = 1;
    while(n--){
        d++;
        if(d > getDay(y,m)) m++, d = 1;
        if(m > 12) y++, m = 1;
    }
    cout << m << endl << d;
}

int main()
{
    
    cin >> y >> d;
    pass(y,d);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值