主要内容

处理大整数以解决196问题

这个例子展示了如何使用symbol Math Toolbox™处理大整数及其十进制表示。

回文

如果一个字符串向后读时是相同的,则称为回文。如果正整数的十进制表示为回文,则称其为回文。例如,191,313和5885都是回文。

考虑以下算法

  • 从任意正整数开始 N 然后把它加到镜像上。

  • 对得到的数字重复此步骤,直到获得回文。

例如,设N=89;然后前3次迭代给出……

8 9 + 9 8 1 8 7

1 8 7 + 7 8 1 9 6 8

9 6 8 + 8 6 9 1 8 3. 7

最终,经过24次迭代后,您将得到回文8813200023188。

N =符号(89);k=0: 0 s1 = char(N);s2 = fliplr (s1);如果比较字符串(s1, s2) disp (["迭代完成"num2str (k)])打破结束N = N + sym(s2);disp (N)结束

                 
                  
                   
                    187
                  
                 

                 
                  
                   
                    968
                  
                 

                 
                  
                   
                    1837
                  
                 

                 
                  
                   
                    9218
                  
                 

                 
                  
                   
                    17347
                  
                 

                 
                  
                   
                    91718
                  
                 

                 
                  
                   
                    173437
                  
                 

                 
                  
                   
                    907808
                  
                 

                 
                  
                   
                    1716517
                  
                 

                 
                  
                   
                    8872688
                  
                 

                 
                  
                   
                    17735476
                  
                 

                 
                  
                   
                    85189247
                  
                 

                 
                  
                   
                    159487405
                  
                 

                 
                  
                   
                    664272356
                  
                 

                 
                  
                   
                    1317544822
                  
                 

                 
                  
                   
                    3602001953
                  
                 

                 
                  
                   
                    7193004016
                  
                 

                 
                  
                   
                    13297007933
                  
                 

                 
                  
                   
                    47267087164
                  
                 

                 
                  
                   
                    93445163438
                  
                 

                 
                  
                   
                    176881317877
                  
                 

                 
                  
                   
                    955594506548
                  
                 

                 
                  
                   
                    1801200002107
                  
                 

                 
                  
                   
                    8813200023188
                  
                 
在迭代24中完成

196年问题

算法是否每次都终止 N

这个问题仍然是开放的,回文爱好者已经投入了许多CPU年 N 1 9 6 Case是问题名称的来源。为了在MATLAB™中解决这个问题,符号整数是有用的,因为它们的大小是无限的。使用的函数信谊将十进制数字字符串转换为符号整数,并且字符(不num2str!)转换回来。

著名的调查 N 1 9 6 案例产生了巨大的数字。要查看一个整数有多少个小数,只需使用log10

N =符号(196);k= 0:00 s1 = char(N);s2 = fliplr (s1);N = N + sym(s2);结束disp (['后面的数字'num2str (k)的迭代:char(装天花板(log10 (N)))));
1000次迭代后的位数:411