2017-05-13 2 views
1

Ich arbeite an einer Rational-Klasse in C++. Die Rationale Zahl wird durch zwei int (Zähler und Nenner) definiert. Ich möchte es richtig als Ziffernnummer anzeigen. für jetzt, ich bestimmt, ob die Zahl eine "begrenzte" oder eine begrenzte Zahl rationale Zahl ist.Anzeige unbegrenzte rationale Zahl definiert durch zwei Ganzzahl

Hier ist ein kleiner Pseudo-Code zu veranschaulichen:

define print_rational(num, denom): 
    if(isUnlimited(num, denom): 
     ? 
    else: 
     //"limited" rational, no problem for them 

Ich mochte wie diese illimited Zahlen angezeigt werden: einmal die repetitiven Ziffer drucken, dann "..." (Beispiel: 1/3 - > 0.3 ..., 1/11 -> 0.09 ...)

Gibt es also einen Algorithmus, um den Ziffernblock zu finden, der in einer rationalen Zahl wiederholt wird?

+1

lange Division arbeitet durch eine Reihe von Divisionen mit Quotienten und Rest. Wenn derselbe Rest ein zweites Mal erscheint (wie es nach dem Brieftaschenprinzip sein muss, da er zwischen 0 und dem Nennwert 1 liegt), werden die Prozesszyklen wiederholt und der gleiche Block wird wiederholt. Somit ist es im Wesentlichen ein Problem der Zyklusdetektion. –

+1

Ich finde die gleiche Frage beantwortet. https://softwareengineering.stackexchange.com/questions/192070/what-is-aefficient-way-to-find-repeating-decimal –

+0

Mit "digit number" meinen Sie eine Zahl mit Dezimalziffern? Du meinst du mit "begrenzt" und "begrenzt" hier? Meinst du mit endlich oder unendlich vielen Dezimalstellen - d. Beenden oder Wiederholen? –

Antwort