最小的利克瑞尔数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>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值