迴文數:一個數正讀反讀都一樣,我們就把它叫做“迴文數”。隨便選一個數,不斷加上把它反過來寫之後得到的數,直到得出一個迴文數爲止。例如,所選的數是67,兩步就可以得到一個迴文數484:
67+76=143
143+341=484
把69變成一個迴文數則需要四步:
69+96=165
165+561=726
726+627=1353
1353+3531=4884
89的“迴文數之路”則特別長,要到第24步纔會得到第一個迴文數,8813200023188。
大家或許會想,不斷地“一正一反相加”,最後總能得到一個迴文數,這當然不足爲奇了。事實情況也確實是這樣——對於幾乎所有的數,按照規則不斷加下去,遲早會出現迴文數。不過,196卻是一個相當引人注目的例外。數學家們已經用計算機算到了3億多位數,都沒有產生過一次迴文數。從196出發,究竟能否加出迴文數來?196究竟特殊在哪兒?這至今仍是個謎。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>196算法</title>
</head>
<body>
<span> 196算法</span><br/><br/>
<input type = "text" id = "number">
<input type = "button" id = "submit" onclick = 'submit()' value ="提交">
</body>
<script type="text/javascript">
function submit(){
var count = 0; //記錄數字
var value = document.getElementById('number').value;
var input_num = value; //起始數字
var newNum; //翻轉後的數字
var flag = check_num(value); //標示是否是迴文數
if(flag == true){
alert(input_num+'是迴文數');
}else{
while(!flag){
value = parseInt(getNewNum(value.toString())) + parseInt(value); //利用value.toString()操作數組
flag = check_num(value.toString());
count++;
}
target_num = value.toString();
alert('經過了'+count+'次運算,'+input_num+'變成了迴文數'+target_num);
}
}
//得到反轉數
function getNewNum(value){
var num = value; //得到傳來的字符串
var length = num.length; //得到字符串長度
var Num_arr = new Array(); //創建數組用來操作字符串
var newNum;
for(i = 0;i < num.length ; i++){ //循環得到字符串的反轉
Num_arr[i] = num[length - 1];
length--;
}
newNum = Num_arr.join(''); //將數組轉爲字符串
return newNum;
}
//檢驗是否迴文
function check_num(num){
var flag = true;
var num_length = num.length; //得到字符串長度
var limit = Math.floor(num_length / 2) ; //只需循環小於一半的次數便可判斷
for( i = 0,j = num_length - 1; i <= limit ;i++,j--){
if(num[i] != num[j]){
flag = false;
break;
}
}
return flag;
}
</script>
</html>