Um uns seitenlange Abhandlungen mit zweifelhafter Treffsicherheit zu ersparen, müsste man schon etwas mehr über die Voraussetzungen wissen:
Wie lautet die ursprüngliche Aufgabenstellung (inkl. Definitionsbereiche, versteht sich)?
Ist diese Formel zwingend zur Implementierung vorgegeben (wäre völlig in Ordnung, aber nicht dass noch ein mathematischer Schritt erwartet wird)?
Soll es eher um C gehen (oder um Mathe)?
Müssen die Ergebnisse in jedem Fall hundertprozentig genau sein (oder sind kleinere Abweichungen erlaubt)?
Schon mal ein kleiner Wink: Ist der Quotient denn in jedem Fall als Ganzzahl darstellbar (weil du von Integer sprichst)?
Noch einer: Eine "natürliche" Grenze für (n) liegt bei ... (wir wollen dich nicht um deine Erkenntnis bringen ). Wenn man es also mathematisch betrachtet, dann kann man sich manche Überprüfung zur Laufzeit ersparen!
Anders wäre der Fall gelagert, wenn aufgrund bestimmter (k) bei bestimmten Algorithmen dann doch größere (n) erlaubt sind, sodass für jeden Einzelfall eine Berechnung angestellt werden müsste. Wenn es jedoch genügt, genau ein maximales (n) zu bestimmen, welches bei allen (k) hält, wobei der Algorithmus vorgegeben ist, läuft es auf eine einfache formale Lösung hinaus (wobei man die schon für den jeweiligen Wertebereich ausrechnen müsste, aber man wüsste es vorher).
(Das mit der "natürlichen" Grenze ist nicht ganz wörtlich gemeint, daher in Anführungszeichen, denn der verwendete Algorithmus hat logischerweise einen Einfluss. Von geschickten Optimierungen (Kürzen etc.) müsste man also absehen. Nimmt man aber die üblichen Formeln bzw. Algorithmen zum Vorbild und lässt (k) mal gedanklich hin- und herwandern, müsste eigentlich etwas bezüglich (n) auffallen.)
Nur eine Idee am Rande: Man könnte Zähler und Nenner separat halten, damit das in Integer geht. Das ähnelt dann stark einer anderen Formel, welche nicht ganz unbekannt ist (wobei sich wieder die Frage stellt, ob das noch im Sinne der Aufgabenstellung wäre)... Ganzzahlen hätten dann auch den Vorteil der Präzision. Dafür käme es bei den Einzelprodukten schnell zum Overflow.
Solche Aufgaben gab es schon öfter, kann man sich irgendwie eine Funktion Schreiben, die sowas ausgibt, wenn so eine grenze erreicht wird?
Wenn du eine portable Möglichkeit suchst, um Overflows zu erkennen, dann müssen die Überprüfungen unabhängig von der eigentlichen Berechnung erfolgen, was in der Regel bzw. zur Sicherheit bedeutet, dass du sie vorher vornimmst. Viele Tipps zu Overflows sind fehlerhaft, weshalb man nicht einfach irgendwas aus dem Web übernehmen sollte. Hier kannst du dich in erprobte Konzepte einlesen:
https://www.securecoding.cert.org/co...lt+in+overflow
Dann müsstest du noch aufpassen, dass dein Compiler die Überprüfungen nicht einfach wegoptimiert. Wenn es zur Übersetzungszeit so aussieht, als könnte der Fall nie eintreten oder als habe er keinerlei Auswirkungen, dann kann das schon mal passieren. Was in einem Debug-Build noch abgefangen wird - und demzufolge auffällt, kann also in einem Release-Build unentdeckt bleiben - bis es sich eines Tages mit voller Wucht auswirkt. Tests sind daher unerlässlich. Das ist aber ein Kapitel für sich, womit wir hier zu weit vom Thema abdriften würden.