计算世界完全对称日的js代码,粗糙版
计算世界完全对称日的js代码,粗糙版
发布时间:2016-12-30 来源:查字典编辑
摘要:比如20111102下午闲着无聊,写了一个,代码没有经过优化,只是凭着一股子无聊劲写出来的。如果有哪位仁兄有兴趣把代码优化一下,感谢不尽经过...

比如20111102

下午闲着无聊,写了一个,代码没有经过优化,

只是凭着一股子无聊劲写出来的。

如果有哪位仁兄有兴趣把代码优化一下,感谢不尽

经过计算在公元2000年到3000年,一共有36个符合条件的世界完全对称日。

见到园子里有的博客,可以在下面加“运行”,直接执行Html代码,不知道怎么整的,可有人告知一下

复制代码 代码如下:

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>公元1000年以后的回文日</title>

<script>

/**

* 将日期变为标准8位格式,如20111102

* 将其分为四段 分别为 20 11 11 02 为世纪,年,月,日

* 按年算法时间复杂度为O(n3),而从后四位,月日即可得到最后的结果,效率更高

* 因为闰年2月尾数为9,超过人类漫长的历史,所以无须考虑

*/

;;(function(){

var theDateList=[];

//出现回文日的世纪最大值

var maxForCentury=30;

//出现回文日的世纪最小值

var minForCentury=20;

//可能出现回文日的年数最大值,这里只粗糙处理

var maxForYear=21;

var maxForDay=31;//不排除闰年

for(var i=1;i<=12;i++){

var stdYear,stdDay;

var stdMonth=getStandardDate(i);

/*

if(getReverseDate(stdMonth)>maxForDay){

continue;

}

*/

maxForDay=getDate(i);

for(var k=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(var i=0;i<theDateList.length;i++){

console.log(theDateList[i]);

}

console.log('共有%d条记录',theDateList.length)

/**

* 根据月份算当前月天数

* @param {int} val 月份

* @return {int}

*/

function getDate(val){

return val%2==0?30:31;

}

/**

* 将小于10的日期值换成标准8位日期值

* @param {int} val 月份或日期

* @return {string} 标准格式

*/

function getStandardDate(val){

if(val<10){

return '0'+val;

}

return val.toString();

}

/**

* 反转日期

* @param {string} date 月份或日期的标准格式

* @return {string} 反转后的标准格式

*/

function getReverseDate(date){

return date.split("").reverse().join("");

}

})();

</script>

</head>

<body>

</body>

</html>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类