2012-08-09 31 views
6

Trong khi lập trình tôi thường thấy mình cần phải tính toán cái gì đó như:Có cách nào thanh lịch hơn để tính x = (y/n) + (y% n? 1: 0) không?

x = (y/n) + (y % n ? 1 : 0);

Hoặc một cách rõ ràng hơn:

x = y/n; 
if (y % n != 0) { 
    x = x + 1; 
} 

Có một cách thanh lịch hơn để đạt được giá trị này? Nó có thể đạt được mà không sử dụng một biểu thức có điều kiện?

+0

Y hoặc n có bao giờ âm? Trong mô hình của bạn, không phân chia số nguyên theo hướng số không, hoặc vòng theo hướng vô cực âm? – Kevin

+0

@Kevin: y và n luôn tích cực. Về mặt kỹ thuật tôi đoán nó cắt ngắn, mà sẽ được về phía không. – grieve

Trả lời

14

Vì vậy, bạn muốn chia số nguyên để làm tròn thay vì xuống. Bạn có thể giả mạo này bằng cách thêm n-1 đến tử số:

x = (y + n - 1)/n; 

Bằng cách đó bạn chuyển giá trị của nó sẽ được làm tròn xuống chỉ đủ để cung cấp cho bạn những kết quả mong muốn.

+2

Chỉ cần biết các vấn đề tràn/gói có thể xảy ra nếu 'n' hoặc' y' lớn. –

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