Qual è la differenza travalore medio di due interi
int x = (right + left)/2;
e
int x = left + (right - left)/2;
appena ho avuto eccezione limite di tempo in primo caso, ma ho accettato nel secondo caso quando si fa ricerca binaria
Qual è la differenza travalore medio di due interi
int x = (right + left)/2;
e
int x = left + (right - left)/2;
appena ho avuto eccezione limite di tempo in primo caso, ma ho accettato nel secondo caso quando si fa ricerca binaria
La somma delle variabili int
destra + a sinistra (fuori interi limite)
è troppo grande e supera il limite di interi stoccaggio è per questo che v'è stato un flusso sopra a causa della somma, ma quando si utilizza la versione differenza la seconda
sinistra + (destra - sinistra) (entro il limite di interi)
si adatta al calcolo ed è a favore della macchina.
Il limite int (limitato) è 2.147.483.647.
Il valore right+left
non rientra nel limite int
.
Ma il valore left + (right - left)/2
è inferiore a int
associato, ecco perché la seconda espressione funziona correttamente.
se si aggiungono numeri così grandi, utilizzare long
.
beh nel primo caso è possibile avere overflow di interi se destra e sinistra sono troppo grandi, ecco perché è necessario utilizzare la seconda variante –
Ok, grazie, ho capito ora. –
@MadiSagimbekov è solo un consiglio, prova a correggere questi piccoli errori da solo, controllando i valori delle variabili ad ogni iterazione. – Daga