Mathematica, sem módulo!
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 dividir.
Primeiro, usamos algumas "aritméticas criativas" para descobrir quantos dígitos existem no número: length = Ceiling[Log[10, n]];
Em seguida, rasterizamos o número para uma boa imagem grande:
Agora, consultamos a caixa delimitadora dessa imagem e preenchemos a largura e a altura (na verdade, usando o deslocamento da linha de base em vez da altura da imagem, porque o MM adiciona algum espaço em branco abaixo da linha de base na imagem).
Em seguida, o NestList subtrai recursivamente a largura da imagem dividida pelo comprimento da string para permitir que o ImageTake retire os caracteres do final da imagem, um por um, e esses são remontados pelo ImageAssemble para esta imagem:
Em seguida, passamos isso para a função TextRecognize para reconhecimento óptico de caracteres, que com esse tamanho de imagem e qualidade de rasterização é capaz de reconhecer impecavelmente a saída final e fornecer o número inteiro:
72641
Logaritmos e OCR - É como chocolate e manteiga de amendoim!
Novo e melhorado
Esta versão preenche o número para lidar com o comportamento obstinado do TextRecognize com números pequenos e, em seguida, subtrai o preenchimento no final. Isso funciona mesmo para números de um dígito!
No entanto, por que você executaria uma rotina reversa em um único número é um mistério para mim. Mas, apenas por uma questão de completude, eu até o fiz funcionar para entradas de zero e uma, que normalmente quebrariam porque o log pavimentado não retorna 1 para elas.
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