Está describiendo un proceso que generalmente se conoce como concatenación, que ocurre con mayor frecuencia en la informática con entidades que llamamos “cadenas” (básicamente cualquier cadena de texto que pueda imaginar).
Los números pueden sufrir el mismo proceso y, de hecho, pueden describirse mediante una sola ecuación matemática.
Ahora, veamos los ejemplos que dio. Tuvimos [matemáticas] 2 [/ matemáticas] y [matemáticas] 3 [/ matemáticas] formando [matemáticas] 23 [/ matemáticas], y [matemáticas] 4 [/ matemáticas] y [matemáticas] 6 [/ matemáticas] formando [matemáticas ] 46 [/ matemáticas]. Ambos ejemplos tienen en común el hecho de que puede lograr estos números multiplicando el primero por [matemáticas] 10 [/ matemáticas] y luego sumando el segundo. Entonces podríamos decir que [matemáticas] f (x, y) [/ matemáticas] es solo [matemáticas] 10x + y [/ matemáticas], luego ir a casa y tomar un té.
… excepto que no podemos. El proceso se descompone cuando [math] y [/ math] es un número mayor que [math] 9 [/ math]. Por ejemplo, si tuviéramos que unir [matemáticas] 2 [/ matemáticas] y [matemáticas] 10 [/ matemáticas], el resultado esperado sería [matemáticas] 210 [/ matemáticas], ¿verdad? Pero si nuestra función es [matemática] 10x + y [/ matemática], obtenemos [matemática] 10 * 2 + 10 = 30 [/ matemática] en su lugar. Entonces, ¿cómo arreglamos esto? Bueno, podemos multiplicar por [matemáticas] 100 [/ matemáticas], siempre que [matemáticas] y [/ matemáticas] sea mayor que [matemáticas] 9 [/ matemáticas], y decir que nuestra función es [matemáticas] 10x + y [/ matemática] si [matemática] y> 9 [/ matemática], y [matemática] 100x + y [/ matemática] de lo contrario.
Cubre muchos más casos, pero … cuando [matemáticas] y [/ matemáticas] es igual a [matemáticas] 100 [/ matemáticas], volvemos al mismo problema. Luego tenemos que definir [matemáticas] f (x, y) [/ matemáticas] igual a [matemáticas] 1000x + y [/ matemáticas] si [matemáticas] y> 99 [/ matemáticas], pero solo seguimos complicando la fórmula.
Pero, hay una manera. Recuerde que las definiciones de funciones comienzan a desglosarse en el momento [math] y [/ math] se convierte en una nueva potencia de [math] 10 [/ math]. ¿Cómo podemos usar este hecho para nuestra ventaja? Simple: usamos logaritmos.
Cualquier número entero es una potencia de [matemática] 10 [/ matemática], o se encuentra entre dos potencias consecutivas de [matemática] 10 [/ matemática]. Por ejemplo, [matemáticas] 48 [/ matemáticas] se encuentra entre [matemáticas] 10 [/ matemáticas] y [matemáticas] 100 (10 ^ 2) [/ matemáticas]; [matemática] 45830 [/ matemática] se encuentra entre [matemática] 10000 (10 ^ 4) [/ matemática] y [matemática] 100000 (10 ^ 5) [/ matemática], y así sucesivamente. Observe que el número de dígitos es siempre el exponente de la potencia de [matemáticas] 10 [/ matemáticas] que es menor o igual que el número en cuestión más [matemáticas] 1 [/ matemáticas]. (No podemos hacer esto tan fácilmente tomando la potencia más grande como referencia, porque tiene el número de dígitos de la próxima potencia más grande). Entonces, si un número [matemático] y [/ matemático] tiene [matemático] n [/ matemático] dígitos, [matemático] y [/ matemático] debe ser un número entre [matemático] 10 ^ {n – 1} [/ matemáticas] y [matemáticas] 10 ^ n [/ matemáticas].
Entonces, sabemos que [matemáticas] 10 ^ {n – 1} \ leq y \ leq 10 ^ n [/ matemáticas]. Necesitamos encontrar el valor [math] n [/ math] en términos de [math] y [/ math], para poder multiplicar nuestro número [math] x [/ math] por [math] 10 ^ n [/ math] antes de agregarlo a [math] y [/ math], por lo que nuestra concatenación siempre funcionará.
A partir de nuestra desigualdad, tomando la base logarítmica [matemática] 10 [/ matemática] de todos los términos, tenemos [matemática] n – 1 \ leq log_ {10} y \ leq n [/ matemática]. Entonces, podemos decir que [math] n = \ lfloor [/ math] [math] {log_ {10} y} \ rfloor + 1 [/ math], donde los corchetes divertidos alrededor del [math] log_ {10} y [/ math] significa que estamos tomando el entero más grande que es más pequeño que [math] log_ {10} y [/ math].
Ahora, podemos construir nuestra función de concatenación. Necesitamos multiplicar [matemática] x [/ matemática] por [matemática] 10 ^ n [/ matemática] y luego agregarla a [matemática] y [/ matemática]; ya que sabemos [matemáticas] n [/ matemáticas] en términos de [matemáticas] y [/ matemáticas], tenemos:
[matemáticas] f (x) = x * 10 ^ {\ lfloor {log_ {10} y} \ rfloor} + y [/ math].
No es la más hermosa de las fórmulas, pero funciona. Simplemente no conecte valores no enteros o valores negativos para el caso. Conducirá a un comportamiento inesperado. ¡Que te diviertas!