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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  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,434 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.076



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.076



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,318 Último mensaje 20 Abril 2006, 19:14 pm
por Robokop
Descomponer numero en factores.. « 1 2 »
Programación C/C++
ThePinkPanther 13 9,394 Último mensaje 21 Febrero 2013, 01:12 am
por 85
Descomponer en unidades
Programación C/C++
85 0 1,904 Último mensaje 30 Marzo 2013, 12:31 pm
por 85
Descomponer una cadena
Programación Visual Basic
oscarmoal 3 2,904 Ú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 13,983 Último mensaje 1 Abril 2014, 20:59 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines