向上取整和向下取整的问题

vipstepstep 2011-05-07 08:25:47
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);
}

}


可以运行,结果好像也没什么问题,但是宋劲衫老师说只需要用到一个+号就可以了。我想不出那种方法。
不知道谁能够写出更好的代码。
...全文
2189 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacobvv 2012-12-22
  • 打赏
  • 举报
回复
引用 3 楼 supermegaboy 的回复:
引用 2 楼 vipstepstep 的回复:引用 1 楼 supermegaboy 的回复: a / b + 1就是了,对于整数除法默认为向下取整的环境,将结果+1就是向上取整了。 不过,实际使用中想写出移植性高的代码,你就不能以向下取整作为默认行为,应该先用一段简单代码检测是哪种取整方法,再分别处理。 不对啊,如果是16 / 4的话答案会是5 ……
变量是无法判断除不除得尽的,所以那个a / b + 1肯定不行。 (a + b - 1) / b是好方法
且行且忆 2011-09-30
  • 打赏
  • 举报
回复
4楼正解呀
abin1525 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qust_sunqiyuan 的回复:]

(a + b - 1) / b
[/Quote]
b!=1
abin1525 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 vipstepstep 的回复:]

引用 9 楼 vipstepstep 的回复:

引用 3 楼 supermegaboy 的回复:

引用 2 楼 vipstepstep 的回复:
引用 1 楼 supermegaboy 的回复:

a / b + 1就是了,对于整数除法默认为向下取整的环境,将结果+1就是向上取整了。

不过,实际使用中想写出移植性高的代码,你就不能以向下取整作为默认行为,应该先用一段简单代……
[/Quote]
b!=1
vipstepstep 2011-05-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 vipstepstep 的回复:]

引用 3 楼 supermegaboy 的回复:

引用 2 楼 vipstepstep 的回复:
引用 1 楼 supermegaboy 的回复:

a / b + 1就是了,对于整数除法默认为向下取整的环境,将结果+1就是向上取整了。

不过,实际使用中想写出移植性高的代码,你就不能以向下取整作为默认行为,应该先用一段简单代码检测是哪种取整方法,再分别处理。


不对啊,……
[/Quote]

(a + b - 1) / b 这样写就对了
vipstepstep 2011-05-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 supermegaboy 的回复:]

引用 2 楼 vipstepstep 的回复:
引用 1 楼 supermegaboy 的回复:

a / b + 1就是了,对于整数除法默认为向下取整的环境,将结果+1就是向上取整了。

不过,实际使用中想写出移植性高的代码,你就不能以向下取整作为默认行为,应该先用一段简单代码检测是哪种取整方法,再分别处理。


不对啊,如果是16 / 4的话答案会是5


你弄错了,当……
[/Quote]

哦原来是这样
biegaoshuwoya 2011-05-07
  • 打赏
  • 举报
回复
向上等不等于向下加一??、菜鸟路过
dianyancao 2011-05-07
  • 打赏
  • 举报
回复
+1,right(1),ok~sb~we are caonima!~~000
AnYidan 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qust_sunqiyuan 的回复:]
(a + b - 1) / b
[/Quote]

++
qust_sunqiyuan 2011-05-07
  • 打赏
  • 举报
回复
(a + b - 1) / b
w5320 2011-05-07
  • 打赏
  • 举报
回复

#include "stdafx.h"

int main(void)
{
int a = 0,b = 0,c;
scanf("%d %d", &a, &b);
c=a/b;
if(a%b)
c++;
printf("%d\n", c);


#include "stdafx.h"

int main(void)
{
int a = 0,b = 0;
scanf("%d %d", &a, &b);
printf("%d\n",a%b?a/b+1:a/b);
飞天御剑流 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vipstepstep 的回复:]
引用 1 楼 supermegaboy 的回复:

a / b + 1就是了,对于整数除法默认为向下取整的环境,将结果+1就是向上取整了。

不过,实际使用中想写出移植性高的代码,你就不能以向下取整作为默认行为,应该先用一段简单代码检测是哪种取整方法,再分别处理。


不对啊,如果是16 / 4的话答案会是5
[/Quote]

你弄错了,当两整数除不尽的时候才有floor和ceiling的问题,除尽的时候是不需要floor和ceiling的。
vipstepstep 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 supermegaboy 的回复:]

a / b + 1就是了,对于整数除法默认为向下取整的环境,将结果+1就是向上取整了。

不过,实际使用中想写出移植性高的代码,你就不能以向下取整作为默认行为,应该先用一段简单代码检测是哪种取整方法,再分别处理。
[/Quote]

不对啊,如果是16 / 4的话答案会是5
飞天御剑流 2011-05-07
  • 打赏
  • 举报
回复
a / b + 1就是了,对于整数除法默认为向下取整的环境,将结果+1就是向上取整了。

不过,实际使用中想写出移植性高的代码,你就不能以向下取整作为默认行为,应该先用一段简单代码检测是哪种取整方法,再分别处理。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧