向上取整和向下取整的问题
linux一站式上的问题
假设变量x和n是两个正整数,我们知道x / n这个表达式的结果取Floor,
例如x是17,n是14,则结果是4,如果希望结果取celling应该怎么写表达式呢?
(例如x是17,n是14,着结果是5,x是16,n是4,则结果是4.)
PS:向下取整运算符称为Floor.
向下取整运算符称为Ceiling
我写的代码:
# include "stdafx.h"
int main(void) {
int a = 0, b = 0;
scanf("%d %d", &a, &b);
if(0 == a % b) {
printf("%d\n", a / b);
}
else {
printf("%d\n", a / b + 1);
}
}
可以运行,结果好像也没什么问题,但是宋劲衫老师说只需要用到一个+号就可以了。我想不出那种方法。
不知道谁能够写出更好的代码。
[解决办法]
a / b + 1就是了,对于整数除法默认为向下取整的环境,将结果+1就是向上取整了。
不过,实际使用中想写出移植性高的代码,你就不能以向下取整作为默认行为,应该先用一段简单代码检测是哪种取整方法,再分别处理。
[解决办法]
(a + b - 1) / b