hola,
tengo una tranca realizando un programa en devc++ y quisiera saber si me pueden ayudar. Tengo el programa casi finalizado pero me falta una cosa, y no lo logro dar
Este es el enunciado
Un número odioso es un número que, cuando se convierte a base 2, tiene un número impar de unos. Por ejemplo, son números odiosos: el 1, el 2 (10), el 4 (100), el 7 (111), el 8 (1000), el 11 (1011). Realice un programa que dado un valor entero K, devuelva la cantidad de números odiosos que hay entre 1 y K
ESTO ES LO QUE HE HECHO.. PERO ME TRANQUE..
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int k;
void pedirInfo()
{
do{
printf("\n\n-Ingrese un numero entero positivo cualquiera: "); scanf("%d",&k);
if(k<=0)//validacion del dato de entrada
{
printf("\a\n\t\t\tERROR: Ingrese un <numero entero positivo>\n");
}
}while(k<=0);
}
int main()
{
printf("\t\t\tNUMERO ODIOSO\n");
char resp;
do{
int x;
pedirInfo();
char cadena[1000];//primero calculo la cadena
itoa(k,cadena,2); //genero la cadena
printf("\nNumero <%d> convertido a base 2: %s\n" ,k,cadena); //muestro la cadena para comprobar que el calculo ha sido correcto
//...
int i, cantidad_de_1=0, cantidad_de_odiosos=0;
for(i=1; i<=1000; i++)//calculo la cantidad de '1' que tiene la cadena, revisando posicion por posicion
{
if(cadena=='1') //revisa si la cadena en la posicion "i" tiene un '1'
{
cantidad_de_1++;
/*
si la cadena tiene un "1" lo cuenta
los numeros odiosos son los que tiene una cantidad impar de numeros '1' dentro de la
cadena
*/
}
}
if(cantidad_de_1%2!=0)
{
//calcula si la cantidad de '1' dentro del vector es impar, si es asi, es un numero odioso
cantidad_de_odiosos++; // si la condicion del if es verdadera, cuento la cantidad de numeros odioso
printf("\nCantidad de numeros odiosos: %d\n\n",cantidad_de_odiosos);
}
else
{
printf("\nEl numero %d no es un numero odioso\n\n",k);
}
//...
do{
printf("\n-Ingrese (s) si desea calcular otra cantidad de numeros odiosos, o (n) si desea finalizar el programa: "); scanf(" %c",&resp);
if((resp!='s' && resp!='S') && (resp!='n' && resp!='N'))//validacion de los datos de entrada
{
printf("\a\n\t\t\tERROR: Ingrese (s) o (n)\n");
}
}while((resp!='s' && resp!='S') && (resp!='n' && resp!='N'));
}while(resp=='s' || resp=='S');
system("pause");
return 0;
}