考虑了一堆边界条件的慢代码
计算日期到天数转换
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();
}
}
查看3道真题和解析
