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


### 回答1: 很高兴为您提供帮助!以下是Python的代码实现: def reverse_num(n): """将字n逆序翻转""" return int(str(n)[::-1]) def is_palindrome(n): """判断字n是否为回文""" return str(n) == str(n)[::-1] def lychrel_number(n): """计算非利克瑞尔n的最终回文及每次迭代过程""" count = 0 while not is_palindrome(n): count += 1 n += reverse_num(n) print(f"第{count}次迭代:{n}") print(f"最终回文为:{n}") # 测试 lychrel_number(57) 输出结果为: 第1次迭代:132 第2次迭代:363 最终回文为:363 希望能对您有所帮助! ### 回答2: 利克瑞尔一个的各位翻转后与原相加,得到的新数继续执行该操作,如果迭代过程中出现了回文,则该数不是利克瑞尔。反之,如果迭代无限制仍未得到回文,则该数就是利克瑞尔。 首先,我们需要判断一个是否为回文,可以使用以下代码实现: def is_palindrome(num): return str(num) == str(num)[::-1] 接下来,我们编写程序实现利克瑞尔的计算: def lychrel_number(num): for i in range(500): # 最大迭代500次 new_num = num + int(str(num)[::-1]) if is_palindrome(new_num): print("在第{}次迭代后得到回文:{}".format(i+1, new_num)) return new_num num = new_num print("在500次迭代后仍未得到回文") return None num = int(input("请输入一个自然:")) if is_palindrome(num): print("输入的为回文,无法进行迭代操作") else: palindrome = lychrel_number(num) if palindrome: print("最终的回文为:{}".format(palindrome)) 在程序中,我们使用了一个for循环来迭代操作,最大迭代次为500次。如果在迭代过程中得到了回文,则直接输出该回文;如果迭代500次仍未得到回文,则输出提示信息。如果输入的本身为回文,则无法进行迭代操作,输出相应的提示信息。 ### 回答3: 利克瑞尔在循环迭代的过程中,无论进行多少次翻转操作,结果都不会变成回文的自然。因此,我们可以通过编写程序,来判断一个是否为利克瑞尔,并计算最终的回文。 具体实现步骤如下: 1. 编写一个函,用于判断一个是否为回文。 2. 编写一个函,用于翻转一个的各位字。 3. 编写一个函,用于进行逆序相加的操作。 4. 编写一个主函,从控制台接收输入的字,并进行迭代操作,直到出现回文为止。 下面是程序代码: ```python # 判断一个是否为回文 def is_palindrome(n): s = str(n) return s == s[::-1] # 翻转一个的各位字 def reverse_num(n): s = str(n) return int(s[::-1]) # 逆序相加的操作 def lychrel_iter(n): return n + reverse_num(n) # 主函 def main(): num = int(input('请输入一个非利克瑞尔:')) # 迭代次 count = 0 while not is_palindrome(num): count += 1 num = lychrel_iter(num) print(f'{count}次迭代结果:{num}') print(f'迭代{count}次后,得到的回文为:{num}') if __name__ == '__main__': main() ``` 在输入一个非利克瑞尔后,程序将不断进行迭代操作,并在每次迭代后输出结果。直到得到回文为止,程序输出最终迭代次和回文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值