考虑了一堆边界条件的慢代码

计算日期到天数转换

http://www.nowcoder.com/questionTerminal/769d45d455fe40b385ba32f97e7bcded

本题目按道理来说应该是简单的。纯粹边界条件的考虑。
但是做完提交以后,看题解的时候发现大家简单的处理了一下闰年与否就能提交了。。。
好吧是我考虑过多了。把我的劣质代码贴一下

import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        while(sc.hasNext()){
            int year = sc.nextInt();
            int month = sc.nextInt();
            int[] days = new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
            int day = sc.nextInt();
            int ans = 0;
            //计算闰年
            boolean leapYear = false;
            if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
                leapYear = true;

            //通用的计算天数
            for(int i=0; i<month-1; i++){
                ans += days[i];
            }
            ans += day;

            //特殊情况处理
            //闰年,且大于2.29
            if(leapYear && month >= 3){
                ans += 1;
            }
            //年份错误
            if(year < 1)
                ans = -1;
            //月份错误
            if(month < 0 || month > 12)
                ans = -1;
            //闰年,2月日期大于29或小于0
            if(leapYear && month == 2 && (day < 0 || day > 29))
                ans = -1;
            //闰年,普通月份日期出错
            if(leapYear && month != 2 && (day < 0 || day > days[month-1]))
                ans = -1;
            //平年,日期错误
            if(!leapYear && (day < 0 || day > days[month-1]) )
                ans = -1;

            System.out.println(ans);
        }
        sc.close();
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务