Saltar al contenido

Cómo concatenar dos enteros en C

Haz todo lo posible por comprender el código de forma correcta previamente a utilizarlo a tu proyecto si tquieres aportar algo puedes dejarlo en la sección de comentarios.

Solución:

unsigned concatenate(unsigned x, unsigned y) 
    unsigned pow = 10;
    while(y >= pow)
        pow *= 10;
    return x * pow + y;        

Prueba de compilación/corrección/velocidad

evito el log10 y pow funciones, porque estoy bastante seguro de que usan punto flotante y son lentos, así que esto puede que sea ​​más rápido en su máquina. Quizás. Perfil.

z = x * pow(10, log10(y)+1) + y;

Explicación:

Primero obtienes el número de dígitos de la variable que debe ir en segundo lugar:

int digits = log10(y)+1;  // will be 2 in your example

Luego “desplazas” la otra variable multiplicándola por 10^dígitos.

int shifted = x * pow(10, digits);   // will be 1100 in your example

Finalmente agregas la segunda variable:

z = shifted + y;   // 1111

O en una línea:

z = x * pow(10, (int)log10(y)+1) + y;

Puede que esta no sea una solución óptima o rápida, pero nadie la mencionó y es simple y podría ser útil.

podrías usar sprintf() y un strtol().

char str[100];
int i=32, j=45;
sprintf(str, "%d%d", i, j);
int result=strtol(str, NULL, 10);

Primero escribes a un string los números uno seguido del otro con sprintf() (al igual que imprimiría en la salida estándar con printf()) y luego convertir la resultante string al número con strtol().

strtol() devuelve un long que puede ser un valor mayor que lo que se puede almacenar en un intpor lo que es posible que desee verificar primero el valor resultante.

int result;
long rv=strtol(str, NULL, 10);
if(rv>INT_MAX || rv

Si el valor devuelto por strtol() no está dentro del rango de un int (es decir, no entre (incluyendo) INT_MIN y INT_MAX), Se produjo un error. INT_MIN y INT_MAX son de limits.h.

Si el valor de en el string es demasiado grande para ser representado en un long, errno se establecerá en ERANGE (desde errno.h) debido al desbordamiento.

Leer sobre strtol() aquí.

Editar:

Como señaló el esclarecedor comentario de chqrlie, los números negativos causarían problemas con este enfoque.

Podrías usar esto o una modificación de esto para sortear eso

char str[100], temp[50];
int i=-32, j=45, result;
sprintf(temp, "%+d", j);
sprintf(str, "%d%s", i, temp+1);
long rv=strtol(str, NULL, 10);

Primero imprima el segundo número a un carácter array temp junto con su signo.

los + en %+d hará que se imprima el signo del número.

Ahora imprime el primer número y el segundo número para str pero sin el signo parte del segundo número. Omitimos la parte del signo del segundo número ignorando el primer carácter en temp.

Finalmente, el strtol() está hecho.

Puntuaciones y comentarios

Recuerda que tienes la capacidad de agregar una reseña si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *