zl程序教程

您现在的位置是:首页 >  后端

当前栏目

计算世界完全对称日的js代码,粗糙版

JS计算代码 世界 完全 对称
2023-06-13 09:14:31 时间
比如20111102
下午闲着无聊,写了一个,代码没有经过优化,
只是凭着一股子无聊劲写出来的。
如果有哪位仁兄有兴趣把代码优化一下,感谢不尽

经过计算在公元2000年到3000年,一共有36个符合条件的世界完全对称日。
见到园子里有的博客,可以在下面加“运行”,直接执行Html代码,不知道怎么整的,可有人告知一下
复制代码代码如下:

<!DOCTYPEHTML>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<title>公元1000年以后的回文日</title>
<script>
/**
*将日期变为标准8位格式,如20111102
*将其分为四段分别为20111102为世纪,年,月,日
*按年算法时间复杂度为O(n3),而从后四位,月日即可得到最后的结果,效率更高
*因为闰年2月尾数为9,超过人类漫长的历史,所以无须考虑
*/
;;(function(){
vartheDateList=[];
//出现回文日的世纪最大值
varmaxForCentury=30;
//出现回文日的世纪最小值
varminForCentury=20;
//可能出现回文日的年数最大值,这里只粗糙处理
varmaxForYear=21;
varmaxForDay=31;//不排除闰年
for(vari=1;i<=12;i++){
varstdYear,stdDay;
varstdMonth=getStandardDate(i);
/*
if(getReverseDate(stdMonth)>maxForDay){
continue;
}
*/
maxForDay=getDate(i);
for(vark=1;k<maxForDay;k++){
stdDay=getStandardDate(k);
stdYear=getReverseDate(stdMonth+stdDay);
if(parseInt(getReverseDate(stdDay),10)>=minForCentury
&&parseInt(getReverseDate(stdDay),10)<maxForCentury)
theDateList.push(stdYear+stdMonth+stdDay)
}
}
theDateList.sort();//排序
for(vari=0;i<theDateList.length;i++){
console.log(theDateList[i]);
}
console.log("共有%d条记录",theDateList.length)
/**
*根据月份算当前月天数
*@param{int}val月份
*@return{int}
*/
functiongetDate(val){
returnval%2==0?30:31;
}
/**
*将小于10的日期值换成标准8位日期值
*@param{int}val月份或日期
*@return{string}标准格式
*/
functiongetStandardDate(val){
if(val<10){
return"0"+val;
}
returnval.toString();
}
/**
*反转日期
*@param{string}date月份或日期的标准格式
*@return{string}反转后的标准格式
*/
functiongetReverseDate(date){
returndate.split("").reverse().join("");
}
})();
</script>
</head>
<body>
</body>
</html>