2014-06-12 2 views
1

J'ai écrit une solution de force brute pour ce problème de palindrome suivant et je voulais que la limite de temps soit dépassée. Mais quand j'ai testé quelques cas de test cela fonctionne correctement mais quand je soumets le code dans spoj je reçois la mauvaise réponse. Voici mon code. S'il vous plaît quelqu'un peut m'aider à comprendre ce qui ne va pas dans ce code de programme.Le Next Palindrome SPOJ

int main() 
    { 
     int t,k,cmp,tmp; 
     scanf("%d",&t); //No of test cases 
     while(t--) 
     { 
     scanf("%d",&k); //Enter the input 
     while(1) 
     { 
      ++k;   //Increment Every no if there is no palindrome 
      tmp=k; 
      cmp=0; 

      while(tmp%10 != 0) // Reverse a number 
      { 
      cmp=(cmp*10)+(tmp%10); 
      tmp=tmp/10; 
      } 

      if(k == cmp) // If Reverse and K are same its a palindrome . 
      { 
      printf("%d\n",k); 
      break; 
      } 
     } 
     } 
     return 0; 
    } 

Voici le lien vers le problème: http://www.spoj.com/problems/PALIN/ Vous pouvez soumettre ma solution à: http://www.spoj.com/submit/PALIN/

Répondre

0
while (tmp%10 != 0) // Reverse a number 
{ 
    cmp = (cmp * 10) + (tmp % 10); 
    tmp = tmp/10; 
} 

Si votre numéro a 0 dans comme 5403123 tmp%10 est 0 et il cesse de renverser la numéro

+1

Le problème est dans l'entrée. Il prend l'entrée comme un «int» qui ne peut pas contenir plus de 10 chiffres, alors que l'entrée pourrait être aussi long que 1000000 chiffres. –

+0

La façon dont il prend l'entrée est un autre problème mais le programme devrait fonctionner pour les petits nombres comme l'entrée est s'il corrige l'erorr que j'ai pointé. Et oui, s'il stockait les entrées en tableau, il aurait besoin d'une autre méthode pour vérifier les palindromes et le programme fonctionnerait pour un plus grand nombre. –

+0

Oui, vous avez raison. J'ai changé un peu le code pour travailler dans votre cas de test. Il montre encore une mauvaise réponse. while (tmp! = 0) { cmp = (cmp * 10) + (tmp% 10); tmp = tmp/10; } – user3045438

0

Le problème indique K est pas plus de 1000000 chiffres. Cela signifie que k peut avoir au plus 1000000 chiffres que vous ne pouvez pas prendre int. Vous devrez prendre l'entrée en tant que caractères et stocker dans un tableau.

char arr[1000001];

int i=0, c;

while(c = getchar() && c!='\n') { arr[i] = c; i++; }

et plus mettre en œuvre votre algorithme.