寻找回文数-Scratch趣味数学编程系列

什么是回文数?

回文是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”、“上海自来水来自海上”、“黄山落叶松叶落山黄”等。

在数学中也有类似的现象,在自然数中,有一种从左往右,从右往左读起来都相同的数,叫做“回文数”,例如11、101、121、12321等。

那么如何寻找回文数呢?在电子计算器的实践中,人们发现了一桩趣事:

任何一个自然数与它的倒序数相加,所得的和再与和的倒序数相加,……如此反复进行下去,经过有限次步骤后,最后必定能得到一个回文数。

例如,把自然数96按上述算法得到回文数的过程如下:

96 + 69 = 165
165 + 561 = 726
726 + 627 = 1353
1353 + 3531 = 4884

这里只需要4步就得到一个回文数4884。

编程思路

不过这个算法在数学上尚未得到证明,目前仍然是一个猜想,我们可以编写一个程序来验证这个猜想,首先接收用户输入一个自然数,然后将它转换成一个回文数,同时把转换的过程显示出来。

通过上面的案例,可以发现,这是一个不断重复同一个规则的过程:将一个自然数和其倒序数相加,看看是不是回文数。所以需要使用递归的编程思想,也就是说,需要定义一个自制积木,然后在自制积木中再调用自己,同时需要保证有递归出口,这里的出口条件就是自然数等于其倒序数。

程序实现

1.建立“回文数”自制积木

建立一个自制积木,将其命名为“回文数”,针对输入的自然数,首先获取其倒序数,并使用变量保存起来,判断自然数和倒序数是否相等,如果相等,说明这就是回文数,将其保存到“日志”列表中,如果不相等,则将整数和其倒序数相加得到一个新的自然数,调用“回文数”自制积木即可,具体的代码如下:

“回文数”自制积木
“回文数”自制积木

2.输入数字寻找回文数

再来编写主程序,接收用户输入的数字,调用自制积木,获取回文数,代码如下:

获取用户输入的自然数并获取回文数
获取用户输入的自然数并获取回文数

程序效果

运行程序,随意输入一些自然数,看看是否能转换为回文数。其执行效果如图所示:

寻找回文数程序效果
寻找回文数程序效果

人们对大量的自然数进行了这样的计算,都得到了回文数。可是,偏偏有一个数很不一般,这个数就是196。让我们试试看,如图:

特殊的回文数196
特殊的回文数196

列表中都已经有11202条数据了,说明已经重复12202次了,还是没有结果,果然非同寻常。196这个数不算大,看起来也没有什么特殊的地方,可是求回文数的方法,遇见它竟然不灵了。真应了那句俗话:大江大海都过了,却在小河沟里翻了船。要不怎么会说,自然数是个充满奥秘的世界呢!

其实,早就有人用电脑把这个步骤重复进行了数十万次,也没有得到回文数,并且,也没有发现循环的迹象,所以还无法判断继续进行下去,究竟能不能得到一个回文数。

像196这样按照上述算法进行变换而无法得到回文数的自然数,称为利克瑞尔数,196是第一个可能的利克瑞尔数,目前也是唯一的一个。

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏
分享
评论 抢沙发
diamondwang的头像-51scratch

昵称

取消
昵称表情代码图片