如果给出一个15位数字,那么找到下一个回文的最佳方法是什么?

时间:2009-10-04 09:43:35

标签: c++ algorithm palindrome

在c ++中,找到给定15位数的下一个回文的最快逻辑是什么?例如下一个回文:134567329807541?

5 个答案:

答案 0 :(得分:16)

  • 将数字分为三部分,headmidtail

    1345673 2 9807541

  • 反向head并将其与tail进行比较  3765431

  • 如果reverse(head) <= tail(如果它们相等,则初始输入是回文,你想要下一个)

    • 如果mid < 9,则递增中间
    • 其他增加head部分并设置mid := 0
  • 结果:= head mid reverse(head)

    1345673 3 reverse(1345673)=&gt; 134567333765431

答案 1 :(得分:3)

我相信就像这样

  1. 将数字分成三部分1345673 2 9807541
  2. 翻转最后一个1457089
  3. 如果它大于第一部分(在这种情况下)
    • firstpart ++
    • middlepart = 0
  4. 翻转第一部分并替换最后一部分。

答案 2 :(得分:1)

我不打算实施任何东西,但我认为逻辑将是:

  1. 分割字符串中间的数字:X是左边部分,Y是右边部分。
  2. 如果反向(X)
  3. 结果是concat(X',reverse(X'));
  4. 如果长度不均匀,则需要分别处理中间数字。但这非常简单。

答案 3 :(得分:0)

我认为以下算法也应该有效.. 它也更容易实现

  i) Divide the given nos into three parts  HEAD MID TAIL 
  ii) Add 1 to number HEAD MID
          (in case of carry, follow basic addition rules)   
  iii) reverse the new HEAD(store it in HEAD_REV)
  iv) required ans is:-  'new HEAD' MID  HEAD_REV

希望以下示例有助于更好地理解算法

不允许: - 23469 9 12367

       So HEAD -> 23469   MID -> 9   TAIL --> 12367

       step 2:-   23469 9 +1 = 23470 0 
              (now HEAD -> 23470 MID -> 0 HEAD_REV -> 07432 )

必填答案: -
                        23470 0 07432

如果这个程序中存在任何缺陷,请告诉我,

答案 4 :(得分:0)

Split the number into three parts head, mid and tail

if reverse(head)>tail 
result := head mid reverse(head)
else if reverse(head)= tail && mid<9 
    mid++
    result := head mid tail
else 
mid =0
head++
result := head mid reverse(head)