算法题:输⼊年⽉⽇,输出该⽇期是当年的多少天
因为题⽬要求参数只能使⽤int,所以这⾥不讨论Java的⽇期特性.
思路分析:
⾸先闰年的年份2⽉为29天,平年2⽉为28天,所以要先判断输⼊的年份是闰年还是平年,判断⽅式是:如果年份能够被4整除但不能被
100整除,或者年份能被400整除,⼆者满⾜其⼀则为闰年,否则为平年,然后算出输⼊⽉份-1的总天数加上当前⽉份的天数,即得到结
果。
代码分析:
如果完全使⽤if判断,判断当前年,在判断当前⽉计算的话,未免太繁琐,这⾥我们可以预先把闰年和平年每⽉的天数保存到数组中,循
环遍历,代码就会精简很多。
publicintgetdate(intyear,intmonth,intday){
int[]leapYear={31,29,31,30,31,30,31,31,30,31,30,31};
int[]GapYear={31,28,31,30,31,30,31,31,30,31,30,31};
booleanisLeapYear=fal;
intdayNum=day;
if(year<=0||month<=0||month>12||day<=0||day>31){
return0;
}
if((year%4==0&&year%100!=0)||year%400==0){
isLeapYear=true;
}
for(inti=0;i
if(isLeapYear){
dayNum=dayNum+leapYear[i];
}el{
dayNum=dayNum+GapYear[i];
}
}
returndayNum;
}
另外还有⼀种⽅式,可以先按平年将前n-1个⽉份的的总天数算出来,采⽤switchca来判断当前⽉份,得到天数,加上当前天数,最后
判断⽉份是否⼤于2,如果是,在判断是否为闰年,如果为闰年则+1天,否则就只加上当前⽉的天数。参考代码如下:
publicintgetdate2(intyear,intmonth,intday){
intsum=0;
booleanisLeapYear=fal;
if(year<=0||month<=0||month>12||day<=0||day>31){
return0;
}
if((year%4==0&&year%100!=0)||year%400==0){
isLeapYear=true;
}
switch(month){
ca1:
sum=0;
break;
ca2:
sum=31;
break;
ca3:
sum=31+28;
break;
ca4:
sum=31+28+31;
break;
ca5:
sum=31+28+31+30;
break;
ca6:
sum=31+28+31+30+31;
break;
ca7:
sum=31+28+31+30+31+30;
break;
ca8:
sum=31+28+31+30+31+30+31;
break;
ca9:
sum=31+28+31+30+31+30+31+31;
break;
ca10:
sum=31+28+31+30+31+30+31+31+30;
break;
ca11:
sum=31+28+31+30+31+30+31+31+30+31;
break;
ca12:
sum=31+28+31+30+31+30+31+31+30+31+30;
break;
default:
n("请输⼊正确的⽉份.");
}
if(month>2){
if(isLeapYear){
sum=sum+day+1;
}el{
sum=sum+day;
}
}el{
sum=sum+day;
}
returnsum;
}
以上为⾃⼰学习记录,有问题的地⽅欢迎⼤家讨论指正。
本文发布于:2022-11-14 19:47:03,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/19625.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |