当前位置: 首页 > 图文教程 > 开发语言 > VC++ > A/B 向上取整的方法

VC++
几个数字信号处理算法程序
简易软盘镜像工具的实现及操作系统编写初步
教你使用正则表达式
C++ 扩展和嵌入 Python
拷贝构造和赋值操作符,C#和本机 C++ 代码的互用性
精通VC与Matlab联合编程(六)
精通VC与Matlab联合编程(五)
一个排序用的C++函数模板
浅析VC与MATLAB联合编程
C++编译器如何实现异常处理
文件重定义冲突的分析与解决
一步一步实现MFC扩展DLL中导出类和对话框
C宏:智者的利刃,愚者的恶梦!
引用的作用
《UTF-8与GB2312之间的互换》的改进
程序风格的要素-C++风格指南
VC+6.0实现文本串的自由拆分
怎样给串行化类分配版本号(可配置版本模式)
在常规的编程任务中使用新的 <tuple> 库
使用 typedef 抑制劣质代码

VC++ 中的 A/B 向上取整的方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 51 ::
收藏到网摘: n/a

A/B 向上取整的方法
作者:孙雪青

1. 问题

A,B都是整数并且 A>1, B>1

求 ┌ A/B ┐ 即 A/B 的上取整。
当 A/B 整除,往上取整返回值 为 A/B。
当 不整除,返回值是 int(A/B) + 1

这个算法的一个应用:如果你有一个动态增长的缓冲区,增长的步长是 B,
某一次缓冲区申请的大小是 A,这个时候,就可以用这个算法,计算出缓冲区的一个合
适大小了,正好可以容纳A,并且不会过于得多,多余部分不会比B多。

2. 方法

int( (A+B-1)/B )

3. HUNTON 的证明

上取整用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)


附录:
CSDN 的原始帖子 http://expert.csdn.net/Expert/TopicView.asp?id=1937887
CSDN 的 FAQ http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=171848

作者信息:
孙雪青 (网名 alphasun,shaking,炮炮;主页 http://alphasun.betajin.com/)