HDU - 2005 第几天?

题目

给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。

Sample Input

1985/1/20
2006/3/12

Sample Output

20
71

想法

该题用java来解非常简单。

  • SimpleDateFormat对象的parse()方法可以从给定字符串的开始解析文本,范围一个日期(Date类型)

用c来解需要注意几个地方。

  • 闫年(共366,二月29)的判断方法:(非整百年与4取余)或(整百年与400取余),0则闫年,非0平年。

-const 常量不能够改变,否则会出现类似的编译错误
assignment of readonly location

java代码

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
    public static void main(String []args) throws ParseException{
        Scanner it =new Scanner(System.in);
        while(it.hasNext()) {
        String s = it.next();
        SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
        Date d = df.parse(s);
        SimpleDateFormat df1 = new SimpleDateFormat("D");
        System.out.println(df1.format(d));
    }
}
}

c代码

#include<stdio.h>
int main()
{
    const int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
    int y,m,d;
    while(scanf("%d/%d/%d",&y,&m,&d)!=EOF){
        int sum=0;
        for(int i=0;i<m-1;i++)
            sum+=a[i];
        if((y%4==0&&y%100!=0||(y%400==0))&&m>=3)
            sum=sum+1;
        printf("%d\n",sum+d);
    }
    return 0;
}

个人博客:陪你一起终身学习!|岳金钊&个人博客


posted @ 2017-11-03 12:09  Honyelchak  阅读(139)  评论(0)    收藏  举报