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)
| | |-+  Una duda concatenando un arreglo de enteros[C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Una duda concatenando un arreglo de enteros[C]  (Leído 8,768 veces)
flacc


Desconectado Desconectado

Mensajes: 854


Ver Perfil WWW
Una duda concatenando un arreglo de enteros[C]
« en: 13 Julio 2012, 20:39 pm »

Hola, ya que tengo un tiempo libre he estado viendo el tema de concatenar enteros desde un arreglo de tipo entero, he escrito este código:

Básicamente tengo 2 contadores que por pereza no reduje a 1  :-*, ahora el funcionamiento se basa en que los decimales son de base 10, cosa que si tengo vector[3] = {1,2,3} una variable contando desde el final y la otra desde el principio:

Citar
resultado = 0;
resultado += 3*(10^0); //donde 0 es la que cuenta desde el principio
resultado = 3
resultado += 2 * (10^1);
resultado = 23;
resultado = 1 * (10^2);
resultado = 123;

la otra parte que ocupa la función es saber cuantos dígitos tiene el elemento numérico del vector con el cual se trabaja, de manera que si es 1 dígito se aumenta en 1 el exponente para seguir elevando, de otra forma le suma a exponente la cantidad de cifras - 1 que corresponde a sumarle el agregado de dígitos que si tuviéramos 1 solo, como decirlo, si tuviéramos 1 dígito el exponente se sumaría en 1, si tuviéramos 2 no tendríamos que sumarle 2 porque como si tenemos 1 se le suma 1 el agregado osea el segundo para que formen 2 es 1... (suena algo enredado lo se, no se me dan mucho las explicaciones  :xD)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int numDigits(int numero);
  6.  
  7. int main()
  8. {
  9.    int vector[5] = {5855, 45, 6, 5, 0}, i, base, exponente, cifras, cifra, n;
  10.  
  11.    //conversion de vector a cifra
  12.    for(i = 4, exponente = 0, base = 10, cifra = 0; i >= 0; i--, exponente++)
  13.    {
  14.        cifras = numDigits(vector[i]);
  15.        n  = pow(base, exponente);
  16.  
  17.        if(cifras > 1)
  18.        {
  19.            exponente += (cifras - 1);
  20.        }
  21.        cifra += (vector[i] * n);
  22.        printf("%d, %d * %d\n",numDigits(n), n, cifra);
  23.    }
  24.    return 0;
  25. }
  26.  
  27. //Funciones
  28.  
  29. //devuelte la cantidad de digitos que tenga una cifra
  30. int numDigits(int numero)
  31. {
  32.    int i = 0;
  33.  
  34.    //conversion a positivo
  35.    if(numero < 0)
  36.    {
  37.        numero *= -1;
  38.    }
  39.  
  40.    //calculo de cifras
  41.    while(numero > 0)
  42.    {
  43.        numero = numero / 10;
  44.        i++;
  45.    }
  46.    return i;
  47. }

Ahora el problema es concatenar los números cuando tenemos mas de 9 dígitos ya que me dan números raros, y aunque pienso que debe ser algún problema de rango numérico no logro ver el error... quizás ustedes le puedan dar un ojo y decirme en que estoy fallando... saludos y gracias


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Una duda concatenando un arreglo de enteros[C]
« Respuesta #1 en: 13 Julio 2012, 20:49 pm »

Esos exámenes como dan lata... en esta liga se tiene la misma duda.
http://foro.elhacker.net/programacion_cc/operacion_suma_vectores_duda-t366632.15.html

Veamos si te sirve...

Código
  1.  
  2. #include <iostream>
  3. #include <cstdio>
  4.  
  5. using namespace std;
  6.  
  7. inline int lenNum(unsigned int num) {
  8.    char buff[20];
  9.    return sprintf(buff, "%d", num);
  10. }
  11.  
  12. inline unsigned long long joinVector(unsigned int *vector, size_t size) {
  13.    register int mul = 1;
  14.    register unsigned long long ret = 0;
  15.    while(size--) {
  16.        ret += (vector[size] * mul);
  17.        if (size)
  18.            for (register unsigned int i = 1, ln = lenNum(vector[size]); i <= ln; i++)
  19.                mul *= 10;
  20.    }
  21.    return ret;
  22. }
  23.  
  24. int main() {
  25.    unsigned int vector1[5] = {5, 978, 6, 4, 9}, vector2[5] = {65, 9, 12, 66, 45};
  26.    cout << joinVector(vector1, 5) + joinVector(vector2, 5) << endl;
  27.    cin.get();
  28.    return 0;
  29. }
  30.  
  31.  

Dulces Lunas!¡.


« Última modificación: 13 Julio 2012, 20:52 pm por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Una duda concatenando un arreglo de enteros[C]
« Respuesta #2 en: 13 Julio 2012, 21:00 pm »

pues que raro, probe con un arreglo de 10 posiciones, raro.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int numDigits(int numero);
  6.  
  7. int main()
  8. {
  9.  int vector[10] = {8,9,9,7,8,99,5, 1, 2, 3};
  10.  int i, base, exponente, cifras, cifra, n;
  11.  
  12.    for(i=0; i<10; i++)
  13.      printf("%d",vector[i]);
  14.    puts("\n\n");
  15.  
  16.    //conversion de vector a cifra
  17.    for(i = 9, exponente = 0, base = 10, cifra = 0; i >= 0; i--, exponente++)
  18.    {
  19.        cifras = numDigits(vector[i]);
  20.        n  = pow(base, exponente);
  21.  
  22.        if(cifras > 1)
  23.        {
  24.            exponente += (cifras - 1);
  25.        }
  26.        cifra += (vector[i] * n);
  27.        printf("%d, %d * %d\n",numDigits(n), n, cifra);
  28.    }
  29.    return 0;
  30. }
  31.  
  32. //Funciones
  33.  
  34. //devuelte la cantidad de digitos que tenga una cifra
  35. int numDigits(int numero)
  36. {
  37.    int i = 0;
  38.  
  39.    //conversion a positivo
  40.    if(numero < 0)
  41.    {
  42.        numero *= -1;
  43.    }
  44.  
  45.    //calculo de cifras
  46.    while(numero > 0)
  47.    {
  48.        numero = numero / 10;
  49.        i++;
  50.    }
  51.    return i;
  52. }
  53.  

esta fue la salida:
Citar
root@datohost:/home/dato000/Documentos/emacs/ejercicios/enteros# ./ejercicio
89978995123


1, 1 * 3
2, 10 * 23
3, 100 * 123
4, 1000 * 5123
5, 10000 * 995123
7, 1000000 * 8995123
8, 10000000 * 78995123
9, 100000000 * 978995123
10, 1000000000 * 1389060531
0, -2147483648 * 138906053

 :huh: :huh: :huh: :huh: :huh: :huh: que carajos significa ese ultimo??
En línea


BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Una duda concatenando un arreglo de enteros[C]
« Respuesta #3 en: 13 Julio 2012, 21:09 pm »

Significa que llegaste al limite de capacidad de tu variable... revisa los limites...

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
flacc


Desconectado Desconectado

Mensajes: 854


Ver Perfil WWW
Re: Una duda concatenando un arreglo de enteros[C]
« Respuesta #4 en: 14 Julio 2012, 02:15 am »

era eso?, yo probé con long int y no funka
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Una duda concatenando un arreglo de enteros[C]
« Respuesta #5 en: 14 Julio 2012, 17:34 pm »

Significa que llegaste al limite de capacidad de tu variable... revisa los limites...

Dulces Lunas!¡.

Es un desbordamiento?? es como si en este caso, en un arreglo de 10 posiciones imprimiera el 11 verdad??? quiero tenerlo claro porque estoy hojeando un libro y haciendo unos ejercicios de arreglos y quiero tenerla clara.
En línea


flacc


Desconectado Desconectado

Mensajes: 854


Ver Perfil WWW
Re: Una duda concatenando un arreglo de enteros[C]
« Respuesta #6 en: 14 Julio 2012, 20:49 pm »

de hecho el algoritmo nunca desborda el arreglo, lo se porque yo mismo lo hice  :xD, lo que pasa es que independiente del tamaño del arreglo el contenido total se cuenta como cifra, y cuando esa cifra tiene mas de 9 0o 10 dígitos me da ese error por eso es que andaba preguntando... no tiene nada que ver con el tamaño del arreglo...saludos
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Una duda concatenando un arreglo de enteros[C]
« Respuesta #7 en: 16 Julio 2012, 05:55 am »

Prueba a declara cifra con "long long int" y veras la gran diferencia... si la crifra o valor es mayor a el limite que puede alojar este tipo se resetea por así decirlo...

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Enteros y Cajas de texto! [Duda]
PHP
Dosjota 4 2,703 Último mensaje 27 Noviembre 2008, 18:56 pm
por Dosjota
Problema con arreglo de enteros
Programación C/C++
Calensito 3 3,204 Último mensaje 6 Octubre 2010, 15:33 pm
por Calensito
Duda con arreglo bidimensional dinámico en IDE DevC++
Programación C/C++
finger10 3 8,019 Último mensaje 2 Septiembre 2011, 17:01 pm
por finger10
Invertir un arreglo de enteros en lenguaje C.- « 1 2 »
Programación C/C++
NOB2014 11 9,696 Último mensaje 19 Enero 2014, 17:53 pm
por rir3760
Lenguaje C:apuntador a arreglo de enteros y arreglo de apuntadores a enteros.
Programación C/C++
NOB2014 2 2,667 Último mensaje 27 Noviembre 2015, 12:59 pm
por NOB2014
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines