elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Descomponer numero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Descomponer numero  (Leído 5,480 veces)
sebamoron86

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Descomponer numero
« en: 8 Junio 2016, 15:38 pm »

Hola, necesito hacer un programa que descomponga un numero de 6 cifras en pares e impares de la siguiente forma.
123456
Pares: 246
Impar: 135

Código:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 6
int main( void )
{
   int c,
       i,
       n,
       par=0,
       impar=0,
       acupar=0,
       acuimpar=0;
   int digitos[N];
   unsigned long long int num;
   printf( "Escribe un numero de %d digitos como maximo: ", N );
   fflush( stdout );
   num = 0;
   for( n = 0; n < N && (c = getchar()) != '\n'; n++ )
   {
      digitos[n] = c - '0';
      num *= 10;
      num += digitos[n];
   }
   printf("%d\n", num);
   for( i = 0; i < n; ++i )
        if(digitos[i]%2==0)
        {
            printf("es Par: %d\n", digitos[i]);
            acupar+=digitos[i]*pow(10,par);
            par++;
        }

        else
        {
           printf("es imPar: %d\n", digitos[i]);
           acuimpar+=digitos[i]*pow(10,impar);
           impar++;
        }


printf("\npar:%d",par);
printf("\nimpar:%d",impar);
printf("\n acupar %d",acupar);
printf("\n acuimpar %d",acuimpar);

   return 0;
}

Con el programa que yo escribi quería que quede el numero par e impar dado vuelta y despues ponerlo bien.
123456
Queda así 642
531
Con ese ejemplo funciona pero si pongo 123444, queda asi
4441 (en vez de 4442)
31

No entiendo porque no funciona


En línea

fary


Desconectado Desconectado

Mensajes: 1.084



Ver Perfil WWW
Re: Descomponer numero
« Respuesta #1 en: 8 Junio 2016, 16:55 pm »

Te estas complicando la vida....

Código
  1. //Programado por fary.
  2.  
  3. #include <stdio.h>
  4. #define N 6
  5.  
  6. int main( void )
  7. {
  8.    int n;
  9.    char c;
  10.    int cp = 0, ci = 0;
  11.    char Pares[N] = {0};
  12.    char Impar[N] = {0};
  13.  
  14.    printf( "Escribe un numero de %d digitos como maximo: ", N );
  15.  
  16.    for( n = 0;(c = getchar()) != '\n'; n++ )
  17.    {
  18.        if ((c - 0x30) % 2 == 0)
  19.        {
  20.            Pares[cp] = c;
  21.            cp++;
  22.        }else{
  23.            Impar[ci] = c;
  24.            ci++;
  25.        }
  26.    }
  27.  
  28.    printf("Pares: %s\nImpares: %s\n", Pares, Impar);
  29.    return 0;
  30. }
  31.  

saludos.


En línea

Un byte a la izquierda.
sebamoron86

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Re: Descomponer numero
« Respuesta #2 en: 8 Junio 2016, 17:48 pm »

Muchas gracias por contestar!!

Código:
if ((c - 0x30) % 2 == 0)
No entiendo el c- 0X30
En línea

fary


Desconectado Desconectado

Mensajes: 1.084



Ver Perfil WWW
Re: Descomponer numero
« Respuesta #3 en: 8 Junio 2016, 19:15 pm »

Muchas gracias por contestar!!

Código:
if ((c - 0x30) % 2 == 0)
No entiendo el c- 0X30

Con eso conviertes el carácter en un número. Mira la tabla ascii.

Saludos.
En línea

Un byte a la izquierda.
geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Descomponer numero
« Respuesta #4 en: 8 Junio 2016, 19:30 pm »

Con ese ejemplo funciona pero si pongo 123444, queda asi
4441 (en vez de 4442)
31

No entiendo porque no funciona

Se debe a la conversión que ocurre al asignar un double a un entero donde se produce un redondeo, debes usar ceil() en ambos casos.

Código
  1. acupar += ceil(digitos[i ]* pow(10,par));
  2. acuimpar += ceil(digitos[i] * pow(10,impar));

En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Descomponer numero
« Respuesta #5 en: 9 Junio 2016, 01:49 am »

Código
  1.    for( n = 0;(c = getchar()) != '\n'; n++ )
  2.  
  3.  

La solucion esta muy sencilla!!

aun asi tiene un overflow!!!

Código
  1. for( n = 0;(c = getchar()) != '\n' && n< 6; n++ )

Así evitamos el overflow.

el 0x30 es el caracter ascii '0'.

Podria quedar:

Código
  1. if ((c - '0') % 2 == 0)

Saludos.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Descomponer o factorizar un numero
Programación Visual Basic
Neobius 1 8,356 Último mensaje 20 Abril 2006, 19:14 pm
por Robokop
Descomponer numero en factores.. « 1 2 »
Programación C/C++
ThePinkPanther 13 9,493 Último mensaje 21 Febrero 2013, 01:12 am
por 85
Descomponer en unidades
Programación C/C++
85 0 1,934 Último mensaje 30 Marzo 2013, 12:31 pm
por 85
Descomponer una cadena
Programación Visual Basic
oscarmoal 3 2,922 Último mensaje 13 Diciembre 2013, 19:47 pm
por MCKSys Argentina
Descomponer un numero entero en lenguaje C. « 1 2 »
Programación C/C++
NOB2014 10 14,077 Último mensaje 1 Abril 2014, 20:59 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines