Mathematica, no modulo!
n = 14627;
length = Ceiling[Log[10, n]];
img = Rasterize[n, RasterSize -> 400, ImageSize -> 400];
box = Rasterize[n, "BoundingBox", RasterSize -> 400, ImageSize -> 400];
width = box[[1]]; height = box[[3]];
ToExpression[
TextRecognize[
ImageAssemble[
ImageTake[img, {1, height}, #] & /@
NestList[# - width/length &, {width - width/length, width},
length - 1]]]]
Vamos a desglosarlo.
Primero usamos algunos "aritmética creativa" para averiguar cuántos dígitos hay en el número: length = Ceiling[Log[10, n]];
A continuación, rasterizamos el número a una bonita imagen grande:
Ahora consultamos el cuadro delimitador de esa imagen y llenamos el ancho y la altura (en realidad, utilizando el desplazamiento de la línea de base en lugar de la altura de la imagen, porque MM agrega algunos espacios en blanco debajo de la línea de base en la imagen).
A continuación, NestList resta de manera recursiva el ancho de la imagen dividido por la longitud de la cadena para permitir que ImageTake extraiga los caracteres del final de la imagen uno por uno, y ImageAssemble los vuelve a ensamblar a esta imagen:
Luego lo pasamos a la función TextRecognize para el reconocimiento óptico de caracteres, que con este tamaño de imagen y calidad de rasterización es capaz de reconocer impecablemente la salida final y darnos el número entero:
72641
Logaritmos y OCR: ¡es como el chocolate y la mantequilla de maní!
Nuevo y mejorado
Esta versión rellena el número para tratar el comportamiento obstinado de TextRecognize con números pequeños, y luego resta el pad al final. ¡Esto incluso funciona para números de un solo dígito!
Sin embargo, por qué ejecutarías una rutina inversa en un solo número es un misterio para mí. Pero solo en aras de la exhaustividad, incluso lo hice funcionar para entradas de cero y uno, que normalmente se romperían porque el registro de piso no devuelve 1 para ellos.
n = 1;
pad = 94949;
length = If[n == 1 || n == 0, 1, Ceiling[Log[10, n]]];
img = Rasterize[n + (pad*10^length), RasterSize -> 400,
ImageSize -> 400];
padlength = length + 5;
box = ImageDimensions[img];
width = box[[1]]; height = box[[2]];
reversed =
ImageResize[
ImageAssemble[
ImageTake[img, {1, height}, #] & /@
NestList[# - width/padlength &, {width + 1 - width/padlength,
width}, padlength - 1]], 200];
recognized = ToExpression[TextRecognize[reversed]];
(recognized - pad)/10^5