Was ist der Unterschied zwischenMitte Wert von zwei ganzen Zahlen
int x = (right + left)/2;
und
int x = left + (right - left)/2;
nur ich bekam Frist Ausnahme in ersten Fall und wurde in zweitem Fall angenommen, wenn binären Such tun
Was ist der Unterschied zwischenMitte Wert von zwei ganzen Zahlen
int x = (right + left)/2;
und
int x = left + (right - left)/2;
nur ich bekam Frist Ausnahme in ersten Fall und wurde in zweitem Fall angenommen, wenn binären Such tun
Die Summe Ihres int Variablen
rechts + links (aus ganzen Zahlen begrenzen)
zu groß und übersteigt ganze Zahlen Speichergrenze Aus diesem Grunde ein Überfluss gibt es wegen der Summe, aber wenn man den Unterschied Version verwendet die zweite
links + (rechts - links) (in ganzen Zahlen) limit
es passt der Berechnung und ist für die Maschine.
Das int-Limit (gebunden) ist 2,147,483,647.
Ihr right+left
Wert liegt außerhalb des Bereichs von int
.
Aber left + (right - left)/2
Wert ist weniger als int
gebunden, so dass deshalb zweiter Ausdruck funktioniert gut.
Wenn Sie solche großen Zahlen hinzufügen, verwenden Sie long
.
gut im ersten Fall können Sie Integer Überlauf haben, wenn rechts und links sind zu groß, deshalb sollten Sie zweite Variante verwenden –
Ok, danke, ich verstehe jetzt. –
@MadiSagimbekov nur einen Rat, versuchen Sie, diese kleinen Fehler selbst zu debuggen, indem Sie die Werte der Variablen bei jeder Iterationen überprüfen. – Daga