2017-12-09 杭电OJ2005《第几天?》

来源:互联网 发布:网络银行的优势 编辑:程序博客网 时间:2024/05/16 04:02

1.题目描述

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

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

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

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

Sample Output
20
71

2.源代码

#include<iostream>using namespace std;int main(){    int y,m,d;    while(scanf("%d/%d/%d",&y,&m,&d)!=EOF)      //这里的EOF是为了防止TLE    {        int i,sum=0;        //定义数组存每个月的上个月的天数,这个月肯定没过完,计数时只加上d就好        int a[12]={0,31,28,31,30,31,30,31,31,30,31,30};        for(i=0;i<m;i++)            sum+=a[i];        sum+=d;        //考虑闰年        if(y%400==0||(y%4==0&&y%100!=0))            if(m>2)            sum++;        cout<<sum<<endl;     }   }

3.运行截图

运行截图

AC

4.调试信息

几点注意:
1.对于输入格式会发现带有“/”号,这可如何是好,cin>>输入能不能用老师也没说哇!!!scanf却有及其精巧的控制能力,就用scanf去抓一下数字,结果发现还真能这么玩,666

2.最好设一个数组去存每个月的天数,这样算起来仅仅是for循环就好了,要注意闰年。

3.刚开始我没对while里的scanf做!=EOF的限定,结果TLE了,至于你要问我这个EOF是什么。。。。我也还没看QAQ,就是别人都是这么弄的,我也是看别人博客学来的QAQ

等我学会EOF就回来更新。。。这个我前几天翻《C++ primer plus》里面有写这个内容,就是书太厚了,还停留在80多页。。。。
原创粉丝点击