商的向上取整与向下取整

0ge 2014-03-15 06:48:47
整理笔记涉及到向上取整与向下取整,看到之前在论坛上和网上摘抄的代码有问题。
之前论坛上给出的方法是:(a + b - 1) / b 以及 a % b ? a / b + 1 : a / b;
因为C/C++默认是向零取整的,这两种方法在处理非负数的时候,结果是正确的,但是涉及到负数,则会出现问题。
完善了一下:

// 向上取整与向下取整
#include <stdio.h>
int ceil_int(const int* pa, const int* pb)
{
if (*pa * *pb >= 0)
return *pa % *pb ? *pa / *pb + 1 : *pa / *pb;
else
return *pa / *pb;
}

int floor_int(const int* pa, const int* pb)
{
if (*pa * *pb >= 0)
return *pa / *pb;
else
return *pa % *pb ? *pa / *pb - 1 : *pa / *pb;
}

int main(void)
{
int a = 0, b = 0;
printf("Please input two integer:");
scanf("%d %d", &a, &b);
printf("ceil_int(a, b) = %d\n", ceil_int(&a, &b));
printf("floor_int(a, b) = %d\n", floor_int(&a, &b));
return 0;
}
...全文
298 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,369

社区成员

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

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