2015-12-25 34 views
5

sự khác biệt giữagiá trị giữa hai số nguyên

int x = (right + left)/2; 

int x = left + (right - left)/2; 

là gì chỉ tôi có thời gian giới hạn ngoại lệ trong trường hợp đầu tiên và đã được chấp nhận trong trường hợp thứ hai khi thực hiện tìm kiếm nhị phân

+2

cũng trong trường hợp đầu tiên bạn có thể có tràn Integer nếu phải và trái quá lớn, đó là lý do tại sao bạn nên sử dụng biến thể thứ hai –

+0

Ok, cảm ơn, tôi hiểu bây giờ. –

+0

@MadiSagimbekov chỉ là một lời khuyên, hãy thử gỡ lỗi những lỗi nhỏ này một mình, bằng cách kiểm tra các giá trị của các biến tại mỗi lần lặp. – Daga

Trả lời

4

Tổng số int biến của bạn

đúng + trái (trong số nguyên hạn chế)

là quá lớn và vượt quá giới hạn số nguyên lưu trữ đó là lý do tại sao có một dòng chảy qua vì sự tổng, nhưng khi bạn sử dụng phiên bản khác biệt, phiên bản thứ hai là

left + (phải - trái) (trong giới hạn số nguyên)

nó phù hợp với tính toán và có lợi cho máy.

2

Giới hạn int (giới hạn) là 2.147.483.647.

Giá trị right+left của bạn vượt quá giới hạn int.
Nhưng left + (right - left)/2 giá trị nhỏ hơn int bị ràng buộc, vì vậy đó là lý do tại sao biểu thức thứ hai hoạt động tốt.

nếu bạn thêm các số lớn như vậy, hãy sử dụng long.

Các vấn đề liên quan