注意该函数的参数是double类型,需要将x/y转为double类型:1.0*x/y.int ceil_result = ceil(1.0*x/y)
int ceil_result = (x+y-1)/y;
原理:
- 当
x能被y整除时,x + y - 1不会改变商,例如:x=6, y=3,则(6 + 3 - 1) / 3 = 8 / 3 = 2。 - 当
x不能被y整除时,x + y - 1会使商加1,例如:x=7, y=3,则(7 + 3 - 1) / 3 = 9 / 3 = 3。
方法三:(x - 1) / y + 1
int ceil_result = (x-1)/y+1;
原理:
- 先将
x减1,使商向下取整,再整体加1实现向上取整。 - 例如:
x=7, y=3,则(7 - 1) / 3 + 1 = 6 / 3 + 1 = 2 + 1 = 3。
若x和y均为正整数:优先使用(x + y - 1) / y,简洁高效。- 溢出风险:当
x和y接近INT_MAX时,x + y - 1可能溢出,需谨慎处理(例如改用long long类型)。