最小的利克瑞爾數196

最小的利克瑞爾數196
利克瑞爾數:指的是將該數與將該數各數位逆序翻轉後形成的新數相加、並將此過程反覆迭代後,結果永遠無法是一個迴文數的自然數。

迴文數:一個數正讀反讀都一樣,我們就把它叫做“迴文數”。隨便選一個數,不斷加上把它反過來寫之後得到的數,直到得出一個迴文數爲止。例如,所選的數是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>


發佈了22 篇原創文章 · 獲贊 37 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章