A,B都是整数并且
A>1, 
B>1求 └ A/B ┘
即 A/B 的上取整。当 A/B 整除,往上取整返回值 为 A/B。
当 不整除,返回值是 int(A/B) + 1能不能作出一个统一的表达式,不用作判断就能计算出来呢?

解决方案 »

  1.   

    int( (A+B-1)/B )
    不知是否可以?
      

  2.   

    -(int)(-A/B)
    这个好像不行,因为
    int(-1.2) = -1
      

  3.   

    最苯的方法就是用int(A/B+1-1/(2^n)),n为多少就看数据的精确度了,当然是大越好。只要保证int(1-1/(2^n))=0,而int(a+1-1/(2^n))!=0,a是一个0到1之间的数(不包括0和1)
      

  4.   

    比如1+0.999999=1.9999999,而1.1+0.9999999就是2.09999999。意思就是加上一个很接近1的数后再取整,很接近1的数a就是要保证除了0+a小于1,其它0到1之间的数加a后都不小于1。
      

  5.   

    还是 (a + b - 1) / b 比较好。
    要是浮点数直接用ceil函数得了
      

  6.   

    int Itemp;
    if((a%b)!=0)
      Itemp=int(a/b)+1;
      

  7.   

    int( (A+B-1)/B )case1, 当 A/B 整除,则 
    (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
    不知大家是否认同
      

  8.   

    上面的推导还有一些不严谨的地方
    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
      

  9.   

    不错不错,
    一开始我只会用FAICHEN(CC) 的方法
    int Itemp;
    if((a%b)!=0)
      Itemp=int(a/b)+1;
      

  10.   

    这样证明好象更简洁一点:上取整用UP表示
    由于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)
      

  11.   

    a>1, b>1, a, 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
      

  12.   

    一个式子:
    int c=A/B+(A%B?1:0);
      

  13.   

    double    dTemp1 = 0.0, dTemp2 = 0.0;
    int     iResult;dTemp1 = A / B;
    iResult = (int)dTemp1;
    dTemp2 = (double)iResult;
    if( dTemp1 > dTemp2)
        iResult ++;
    return iResult;
      

  14.   

    恩,我还是比较喜欢看 HUNTON()  的证明,呵呵
      

  15.   

    #define UP(A,B) (A+B-1)&^(B-1)其中B为偶数
    上面定义的宏是微软用来向上取整用的