Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Carlos2210 en 18 Abril 2016, 01:09 am



Título: Necesito un poco de ayuda :$
Publicado por: Carlos2210 en 18 Abril 2016, 01:09 am
Hola a todos, termine de escribir supuestamente un programa que me lanza numeros capicua en intervalos definidos por el usuario; lo que pasa es que solo me lanza un valor que es el siguiente de la letra "a" poer de ahi acaba todo :c. Que mas le falta para que siga generando más valores ????

Código:
 #include <iostream>

using namespace std;

int main ()
{
    int a,b,s,c = 0,total = 0;
    
    cout << "Por favor ingrese el primer numero: ";
    cin >> a;
    
    cout << "Por favor ingrese el segundo numero: ";
    cin >> b;
    
    while ( a < b )
    {
        a += 1;
        s = a;
            while ( s > 0)
            {
                c = c * 10 + s%10;
                s /= 10;
            }
        if ( c == a)
        {
            ++total;
            cout << c ;
        }  
    }
     cout << "\nEl numero de terminos capicua es " << total << endl;
     return 0;
}


Título: Re: Necesito un poco de ayuda :$
Publicado por: AlbertoBSD en 18 Abril 2016, 20:06 pm
supuestamente tu codigo esta incompleto, realmente no se aque te refieres cuando dices "a intervalos regulares definidos por el usuario"

Que representa a? que representa b?

al parecer el ciclo que hace el trabajo es este:

Código
  1. while ( s > 0) {
  2. c = c * 10 + s%10;
  3. s /=10;
  4. }
  5.  

Le agrege un:

Código
  1. printf("%i\n",c);
para visualizar cuando vale c en cada iteracion me da de salida cuando agrego 10000 y 10002 como numeros a y b respectivamente:

Código
  1. 1
  2. 10
  3. 100
  4. 1000
  5. 10001
  6. 10001
  7. 100012
  8. 1000120
  9. 10001200
  10. 100012000
  11. 1000120001
  12. El numero de terminos capicua es 1



Título: Re: Necesito un poco de ayuda :$
Publicado por: HardForo en 18 Abril 2016, 20:44 pm
Yo lo haria asi:

Código
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. using namespace std;
  7.  
  8. /*
  9. Capicupa (palindromo) ?
  10. */
  11.  
  12. const char* r_bool(bool b);
  13. bool es_capicua(int x);
  14. void print_capicua_rango(int a, int b);
  15.  
  16.  
  17. int main(void)
  18. {
  19. cout << r_bool(es_capicua(10000)) << endl; // false
  20. cout << r_bool(es_capicua(10001)) << endl; // true
  21. cout << r_bool(es_capicua(10501)) << endl; // true
  22. cout << r_bool(es_capicua(807)) << endl; // false
  23. cout << r_bool(es_capicua(808)) << endl; // true
  24.  
  25. print_capicua_rango(19,100);
  26.  
  27. }
  28.  
  29. void print_capicua_rango(int a, int b){
  30. int i,count=0;
  31. for (i=a; i<b; i++){
  32. if (es_capicua(i)){
  33. cout << i << endl;
  34. count++;
  35. }
  36. }
  37. cout << "El numero de terminos capicua es " << count;
  38. }
  39.  
  40. bool es_capicua(int x){
  41. char buffer [10];
  42. int i;
  43. bool exito = true;
  44.  
  45. itoa(x,buffer,10);
  46.  
  47. int len = strlen(buffer);
  48. for (i = 0; i<(int)len/2 && exito; i++)
  49. exito = buffer[i]==buffer[len-1-i];
  50.  
  51. return exito;
  52. }
  53.  
  54. const char* r_bool(bool b){
  55.  return (b ? "true" : "false");
  56. }
  57.