HDU 2005

第几天?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 64151    Accepted Submission(s): 24258


Problem Description
给定一个日期,输出这个日期是该年的第几天。
 

Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
 

Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
 

Sample Input
1985/1/20 2006/3/12
 

Sample Output
20 71
 

为什么说这题 ,因为比赛时遇到一道类似的题当时脑袋比较坍塌, 竟然纠结了很久 

题意; 算几月几号是那年的第几天

算法思想:

     1、判断平年还是闰年 这里用宏定义

      2、需要一个二维数组表示 那年的各月分的天数 这个很重要特别是28 29,很坑爹

      3、用个循环线把之前的月份的天数加起来 最后再加个零头就可以了

源代码:

#include<iostream>
#include<cstdio>
using namespace std;

#define lev(n) (n%4 ==0 && (n%100 != 0 || n%400 ==0))
int main()
{//上面定义了一宏 首先能被4整除, 不能被100 可以被400整除的数是 闰年返回1其他返回0
    int i;
    int y, m, d;
    while(scanf("%d/%d/%d",&y,&m,&d) != EOF)
    {//思路很简单先把这个年头的所有月份的天数先算出来 再加上这个月的
        //技巧在于为什么先是0 因为如果不先为0 的话 是1月的话, 那么1 月的天数也会被加上的
        int day = 0;
        int month[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}};
        for(i =0; i < m; i++)
        {
            day += month[lev(y)][i];
        }
        day += d;
        cout<<day<<endl;
    }
    return  0;
}


wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值