A,B都是整数并且
A>1,
B>1求 └ A/B ┘
即 A/B 的上取整。当 A/B 整除,往上取整返回值 为 A/B。
当 不整除,返回值是 int(A/B) + 1能不能作出一个统一的表达式,不用作判断就能计算出来呢?
A>1,
B>1求 └ A/B ┘
即 A/B 的上取整。当 A/B 整除,往上取整返回值 为 A/B。
当 不整除,返回值是 int(A/B) + 1能不能作出一个统一的表达式,不用作判断就能计算出来呢?
不知是否可以?
这个好像不行,因为
int(-1.2) = -1
要是浮点数直接用ceil函数得了
if((a%b)!=0)
Itemp=int(a/b)+1;
(A+B-1)/B = A/B + (B-1)/B
取整之后等与 A/B = int(A/B) + int( (B-1)/B )
注意 int( (B-1)/B ) = 0case2, 当A/B 不整除,假设 A = n*B + q
于是
(A+B-1)/B = (n*B+q)/B + (B-1)/B = n + (q + B-1)/B
对他取整
int( (A+B-1)/B )
= int( n + (q + B-1)/B )
= n + int( (q+B-1)/B )
注意 int( (q+B-1)/B ) = 1,那是因为 1<q<B, 并且 0< B-1 < B
所以 B < q+B-1 < 2*B
所以 int( (q+B-1)/B ) = 1
不知大家是否认同
1, 1<q<B ,应该是 1<=q<B 然后才能得出 B <= q+B-1 < 2*B,
然后 1 <= (q+B-1)/B < 2
可以得到 int( (q+B-1)/B ) = 12, case2, 当A/B 不整除,假设 A = n*B + q, 这里 1<=q<B
一开始我只会用FAICHEN(CC) 的方法
int Itemp;
if((a%b)!=0)
Itemp=int(a/b)+1;
由于A>1、B>1,且A、B都是整数,所以可以设A=NB+M
其中N为非负整数,M为0到B-1的数,则
A/B = N + M/B
(A+B-1)/B = N + 1 + (M - 1)/B;
当M为0时,
UP(A/B) = N,
int((A+B-1)/B) = N + int(1 - 1/B) = N
当M为1到B-1的数时,0 <= M-1 <= B-2
UP(A/B) = N + 1,
int((A+B-1)/B) = N + 1 + int((M-1)/B) = N + 1
所以对A>1、B>1的整数A、B都有:
UP(A/B) = int((A+B-1)/B)
这个是前提条件,要不 (a+b-1)/b就不是正确答案,例如 a=3 b=-1
a/b = -1.5 取上当是-1
而 a + b - 1 = 3 - 2 - 1 = 0. 结果就不正确了。在楼主的前提下,证明:
kb+1 <= a <= (K+1)b
(k+1)b <= a+ b -1 <= (k+1)b + b-1 这个范围的数,除b得到的整数部分就是 k+1
int c=A/B+(A%B?1:0);
int iResult;dTemp1 = A / B;
iResult = (int)dTemp1;
dTemp2 = (double)iResult;
if( dTemp1 > dTemp2)
iResult ++;
return iResult;
上面定义的宏是微软用来向上取整用的