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