Mathematica, kein 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]]]]
Lassen Sie es uns aufschlüsseln.
Zuerst verwenden wir einige "kreative Arithmetik", um herauszufinden, wie viele Ziffern die Zahl enthält: length = Ceiling[Log[10, n]];
Als nächstes rastern wir die Zahl zu einem schönen großen Bild:
Nun fragen wir nach dem Begrenzungsrahmen dieses Bildes und füllen die Breite und Höhe (tatsächlich unter Verwendung des Grundlinienversatzes anstelle der Bildhöhe, da MM dem Bild unter der Grundlinie ein Leerzeichen hinzufügt).
Als nächstes subtrahiert NestList rekursiv die Breite des Bildes geteilt durch die Länge des Strings, damit ImageTake Zeichen nacheinander vom Ende des Bildes abziehen kann. Diese werden von ImageAssemble wieder zu diesem Bild zusammengesetzt:
Dann geben wir das an die TextRecognize-Funktion zur optischen Zeichenerkennung weiter, die bei dieser Bildgröße und Rasterqualität die endgültige Ausgabe einwandfrei erkennen und uns die Ganzzahl geben kann:
72641
Logarithmen und OCR - Es ist wie mit Schokolade und Erdnussbutter!
Neu und verbessert
Diese Version füllt die Zahl auf, um mit dem hartnäckigen Verhalten von TextRecognize bei kleinen Zahlen fertig zu werden, und subtrahiert dann das Pad am Ende. Dies funktioniert sogar für einstellige Zahlen!
Es ist mir ein Rätsel, warum Sie für eine einzelne Nummer eine umgekehrte Routine ausführen. Der Vollständigkeit halber habe ich es sogar für Eingaben von Null und Eins funktionieren lassen, was normalerweise zu Fehlern führen würde, da das Protokoll mit Fußboden keine 1 für sie zurückgibt.
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