Processing math: 100%

Ceil函数实现

Introductio

下取整函数,或高斯函数,记作x,表示不超过x的最大整数。

上取整函数,记作x,表示不小于x的整数中最小的那个。

易得如下性质x=x

Python approach

python2中默认的整数除法是向下取整,根据以上性质,可以直接转化成代码:

1
2
def ceil(op1, op2):
return -(-op1/op2)

C/C++ approach

C++中的整数除法默认是截断小数部分,比如1.5截断后变为1,-1.5截断后变为-1。可见,在正整数时是向下取整, 在负整数时是向上取整。所以简单的实现可以将其变为负数,然后再根据原来的符号输出。但是其实有更简单的做法:

1
2
3
4
int ceil(int op1, int op2)
{
return (op1 + op2 - 1)/op2;
}

propositon: a/b=(a+b1)//b 其中//代表截断除,即C++自带的除法。
Proof:

我们可以设 a=kb+r 其中 k=a/b,0<r<b ,可得

(a+b1)//b=[(k+1)b+r1]//b=k+1+(r1)//b=k+1=a/b+1=a/b

QED