Test Foro de elhacker.net SMF 2.1

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 ????

#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:


while ( s > 0) {
c = c * 10 + s%10;
s /=10;
}


Le agrege un:

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:

1
10
100
1000
10001
10001
100012
1000120
10001200
100012000
1000120001
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:


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

/*
Capicupa (palindromo) ?
*/

const char* r_bool(bool b);
bool es_capicua(int x);
void print_capicua_rango(int a, int b);


int main(void)
{
cout << r_bool(es_capicua(10000)) << endl; // false
cout << r_bool(es_capicua(10001)) << endl; // true
cout << r_bool(es_capicua(10501)) << endl; // true
cout << r_bool(es_capicua(807)) << endl; // false
cout << r_bool(es_capicua(808)) << endl; // true

print_capicua_rango(19,100);

getchar();
}

void print_capicua_rango(int a, int b){
int i,count=0;
for (i=a; i<b; i++){
if (es_capicua(i)){
cout << i << endl;
count++;
}
}
cout << "El numero de terminos capicua es " << count;
}

bool es_capicua(int x){
char buffer [10];
int i;
bool exito = true;

itoa(x,buffer,10);

int len = strlen(buffer);
for (i = 0; i<(int)len/2 && exito; i++)
exito = buffer[i]==buffer[len-1-i];

return exito;
}

const char* r_bool(bool b){
 return (b ? "true" : "false");
}