Implementieren Sie eine Funktion divide(int a, int b, int c)
, die den Basis-10-Wert von ausgibt a/b
. ohne Verwendung von Gleitkomma-Mathematik oder BigInteger
/ BigDecimal
und äquivalenten Bibliotheken. Mit Ausnahme der (möglichen) Ausnahme in Punkt 4 müssen mindestens c
genaue Zeichen innerhalb des Satzes 0123456789.
gedruckt werden.
a
undb
kann eine beliebige 32-Bit-Ganzzahl sein. Update: Wenn Sie zu Golfzwecken eine Eingabe mit 64-Bit-Grundelementen wünschen, ist dies in Ordnung, Sie müssen jedoch nicht den gesamten 64-Bit-Datenbereich unterstützen.- Sie müssen nicht überprüfen, ob dies
c
positiv ist (obwohl Ihr Programm hoffentlich nicht abstürzt), wenn dies nicht der Fall ist. - Die unterstützte Mindestobergrenze für
c
ist500
. Es ist in Ordnung, wenn Ihr Programm diec
obigen Werte nicht unterstützt500
, aber es ist auch in Ordnung, wenn dies der Fall ist. - Bei gleichmäßig verteilten Zahlen können Sie wählen, ob Sie zusätzliche Nullen (basierend auf dem Wert von
c
) oder nichts drucken möchten . - Sie müssen die Funktion nicht verwenden können, um weitere Aufgaben mit dem Quotienten auszuführen. Das einzige Ziel ist das Drucken.
- Bei Zahlen zwischen
-1
und1
haben Sie die Wahl, ob Sie einen Zeilenumbruch drucken möchten0
. Dies ist jedoch das einzige Szenario, in dem das Drucken einer führenden Null zulässig ist und Sie möglicherweise nur eine solche Null drucken. - Sie können für die letzte Dezimalstelle eine beliebige Rundungs- / Floor- / Ceil-Logik verwenden, die Sie bevorzugen.
- Für eine negative Antwort müssen Sie eine führende drucken
-
. Dies zählt nicht dazuc
. Aber es ist Ihre Wahl , wenn Sie drucken möchten,
+
oder nichts für eine positive Antwort. - Sowohl Ganzzahlteilung als auch Ganzzahlmodul sind zulässig. Denken Sie jedoch daran , dass Sie auf Primitiven beschränkt sind, es sei denn , Sie wählen Sie Ihre eigene implementieren
BigInteger
/BigDecimal
Bibliothek , die zählt gegen Ihre Codelänge. - Sie müssen nicht behandeln müssen
b
sein0
, wenn Sie können , wenn Sie wollen. Ihr Programm kann in eine Endlosschleife eintreten oder abstürzen, wennb=0
, und Sie werden nicht bestraft. - Leichte Regeländerung pro Kommentar. Um sicherzustellen, dass das Spielfeld eben ist
a
undb
garantiert 32-Bit-Ganzzahlen aufweist, können Sie 64-Bit-Ganzzahlen verwenden. Wenn Ihre gewählte Sprache mehr als 64-Bit-Ganzzahlen als Grundelement enthält, können Sie diese Funktionalität zu keinem Zeitpunkt verwenden (so tun, als wäre sie auf 64-Bit begrenzt). - Ein weiterer Punkt, der unklar ist (er sollte jedoch keine der aktuell gültigen Antworten ändern): Während er
c
entweder als die Anzahl der gedruckten Zeichen oder die Anzahl der Nachkommastellen interpretiert werden kann, muss Ihr Programm siec
auf eine relevante Weise verwenden um zu entscheiden, wie viele Zeichen gedruckt werden sollen. Mit anderen Wortendivide(2,3,2)
sollte die Ausgabe viel kürzer sein alsdivide(2,3,500)
; Es ist nicht in Ordnung, 500 Zeichen ohne Rücksicht auf zu druckenc
. - Der Name der Funktion ist mir eigentlich egal.
d
ist für Golfzwecke in Ordnung.
Eingang
Es wird sowohl ein Funktionsaufruf als auch ein Lesevorgang stdin
akzeptiert. Wenn Sie von lesen stdin
, wird jedes Zeichen, das nicht in der Menge enthalten [-0123456789]
ist, als Argumentbegrenzer betrachtet.
Ausgabe
Zeichen bis stdout
wie oben beschrieben.
Beispiel
für divide(2,3,5)
alle die folgenden sind akzeptabel Ausgänge:
0.666
0.667
.6666
.6667
0.666
0.667
.6666
.6667
+0.666
+0.667
+.6666
+.6667
Ein weiteres Beispiel: Für divide(371,3,5)
die folgenden sind alle akzeptablen Ausgaben:
123.6
123.7
123.6
123.7
+123.6
+123.7
123.66666
123.66667
123.66666
123.66667
+123.66666
+123.66667
Und für divide(371,-3,5)
die folgenden sind alle akzeptabel:
-123.6
-123.7
-123.66666
-123.66667
92,3,5
das tust, wäre die Antwort zum Beispiel30.67