Autor
|
Tema: Una duda concatenando un arreglo de enteros[C] (Leído 8,783 veces)
|
flacc
|
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: 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 ) #include <stdio.h> #include <stdlib.h> #include <math.h> int numDigits(int numero); int main() { int vector[5] = {5855, 45, 6, 5, 0}, i, base, exponente, cifras, cifra, n; //conversion de vector a cifra for(i = 4, exponente = 0, base = 10, cifra = 0; i >= 0; i--, exponente++) { cifras = numDigits(vector[i]); n = pow(base , exponente ); if(cifras > 1) { exponente += (cifras - 1); } cifra += (vector[i] * n); printf("%d, %d * %d\n",numDigits (n ), n , cifra ); } return 0; } //Funciones //devuelte la cantidad de digitos que tenga una cifra int numDigits(int numero) { int i = 0; //conversion a positivo if(numero < 0) { numero *= -1; } //calculo de cifras while(numero > 0) { numero = numero / 10; i++; } return i; }
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
Mensajes: 3.158
I'Love...!¡.
|
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.htmlVeamos si te sirve... #include <iostream> #include <cstdio> using namespace std; inline int lenNum(unsigned int num) { char buff[20]; return sprintf(buff, "%d", num); } inline unsigned long long joinVector(unsigned int *vector, size_t size) { register int mul = 1; register unsigned long long ret = 0; while(size--) { ret += (vector[size] * mul); if (size) for (register unsigned int i = 1, ln = lenNum(vector[size]); i <= ln; i++) mul *= 10; } return ret; } int main() { unsigned int vector1[5] = {5, 978, 6, 4, 9}, vector2[5] = {65, 9, 12, 66, 45}; cout << joinVector(vector1, 5) + joinVector(vector2, 5) << endl; cin.get(); return 0; }
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
Mensajes: 3.034
|
pues que raro, probe con un arreglo de 10 posiciones, raro. #include <stdio.h> #include <stdlib.h> #include <math.h> int numDigits(int numero); int main() { int vector[10] = {8,9,9,7,8,99,5, 1, 2, 3}; int i, base, exponente, cifras, cifra, n; for(i=0; i<10; i++) //conversion de vector a cifra for(i = 9, exponente = 0, base = 10, cifra = 0; i >= 0; i--, exponente++) { cifras = numDigits(vector[i]); n = pow(base , exponente ); if(cifras > 1) { exponente += (cifras - 1); } cifra += (vector[i] * n); printf("%d, %d * %d\n",numDigits (n ), n , cifra ); } return 0; } //Funciones //devuelte la cantidad de digitos que tenga una cifra int numDigits(int numero) { int i = 0; //conversion a positivo if(numero < 0) { numero *= -1; } //calculo de cifras while(numero > 0) { numero = numero / 10; i++; } return i; }
esta fue la salida: 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 que carajos significa ese ultimo??
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
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
|
era eso?, yo probé con long int y no funka
|
|
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
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
|
de hecho el algoritmo nunca desborda el arreglo, lo se porque yo mismo lo hice , 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
Mensajes: 3.158
I'Love...!¡.
|
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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Enteros y Cajas de texto! [Duda]
PHP
|
Dosjota
|
4
|
2,705
|
27 Noviembre 2008, 18:56 pm
por Dosjota
|
|
|
Problema con arreglo de enteros
Programación C/C++
|
Calensito
|
3
|
3,211
|
6 Octubre 2010, 15:33 pm
por Calensito
|
|
|
Duda con arreglo bidimensional dinámico en IDE DevC++
Programación C/C++
|
finger10
|
3
|
8,033
|
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,710
|
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,679
|
27 Noviembre 2015, 12:59 pm
por NOB2014
|
|