si on leur donne un numéro à 15 chiffres Quelle est la meilleure façon de trouver la prochaine palindrome?

StackOverflow https://stackoverflow.com/questions/1516038

  •  19-09-2019
  •  | 
  •  

Question

dans c ++ ce sera la logique la plus rapide pour trouver la prochaine palindrome d'un 15 donné nombre de chiffres? par exemple ce que sera le prochain palindrome de: 134567329807541

Était-ce utile?

La solution

  • Diviser le nombre en trois parties, head, mid, tail

    1345673 2 9807541

  • head inverse et le comparer à tail  3765431

  • Si reverse(head) <= tail (si elles sont égales l'entrée initiale est un palindrome, et que vous voulez l'autre)

    • Si mid < 9, incrémenter mi
    • partie head incrément Else et mid := 0 set
  • . Résultat: = head mid reverse(head)

    1345673 3 inverse (1345673) => 134567333765431

Autres conseils

Je crois qu'il est comme ceci

  1. Diviser le nombre en trois parties 1345673 2 9807541
  2. Retournez le dernier 1457089
  3. Si elle est supérieure à la première partie (il est dans ce cas)
    • firstpart ++
    • middlepart = 0
  4. première partie retourner et remplacer la dernière partie.

Je ne suis pas sur le point de mettre en œuvre quoi que ce soit, mais j'imagine la logique serait:

  1. Split le nombre au milieu de la chaîne: X étant la partie gauche et Y étant la partie droite
  2. .
  3. Soit X »= {X + 1 si inverse (X)
  4. Le résultat est ensuite concat (X 'inverse (X'));

Si la longueur est inégale, il faut traiter le milieu chiffre séparément. Mais cela est tout à fait banal.

Je pense que le algo suivant devrait également fonctionner .. Il est plus facile à mettre en œuvre aussi

  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

En espérant cet exemple suivant vous aidera à mieux comprendre l'algo

laissez-nos: - 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 )

requis: -
Ans                         23470 0 07432

Plz do infrom moi s'il existe une faille dans cette procédure

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top