为了账号安全,请及时绑定邮箱和手机立即绑定

C ++:向上舍入到最接近的数字的倍数

C ++:向上舍入到最接近的数字的倍数

好的 - 我几乎很尴尬在这里张贴这个(如果有人投票结束我会删除),因为这似乎是一个基本问题。这是在C ++中舍入到数字的倍数的正确方法吗?我知道还有其他与此相关的问题,但我特别感兴趣的是知道在C ++中执行此操作的最佳方法是什么:int roundUp(int numToRound, int multiple){ if(multiple == 0) {  return numToRound; } int roundDown = ( (int) (numToRound) / multiple) * multiple; int roundUp = roundDown + multiple;  int roundCalc = roundUp; return (roundCalc);}更新:对不起我可能没有明确意图。这里有些例子:roundUp(7, 100)//return 100roundUp(117, 100)//return 200roundUp(477, 100)//return 500roundUp(1077, 100)//return 1100roundUp(52, 20)//return 60roundUp(74, 30)//return 90
查看完整描述

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

这适用于正数,不确定负数。它只使用整数数学。


int roundUp(int numToRound, int multiple)

{

    if (multiple == 0)

        return numToRound;


    int remainder = numToRound % multiple;

    if (remainder == 0)

        return numToRound;


    return numToRound + multiple - remainder;

}

编辑:这是一个使用负数的版本,如果用“向上”表示结果总是> =输入。


int roundUp(int numToRound, int multiple)

{

    if (multiple == 0)

        return numToRound;


    int remainder = abs(numToRound) % multiple;

    if (remainder == 0)

        return numToRound;


    if (numToRound < 0)

        return -(abs(numToRound) - remainder);

    else

        return numToRound + multiple - remainder;

}


查看完整回答
反对 回复 2019-09-20
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

没有条件:


int roundUp(int numToRound, int multiple) 

{

    assert(multiple);

    return ((numToRound + multiple - 1) / multiple) * multiple;

}

对于负数,这类似于从零开始舍入


编辑:适用于负数的版本


int roundUp(int numToRound, int multiple) 

{

    assert(multiple);

    int isPositive = (int)(numToRound >= 0);

    return ((numToRound + isPositive * (multiple - 1)) / multiple) * multiple;

}


如果multiple是2的幂


int roundUp(int numToRound, int multiple) 

{

    assert(multiple && ((multiple & (multiple - 1)) == 0));

    return (numToRound + multiple - 1) & -multiple;

}


查看完整回答
反对 回复 2019-09-20
?
largeQ

TA贡献2039条经验 获得超7个赞

当因子始终为正时,这种方法有效:


int round_up(int num, int factor)

{

    return num + factor - 1 - (num - 1) % factor;

}

编辑:返回round_up(0,100)=100。请参阅下面的保罗评论,以获得返回的解决方案round_up(0,100)=0。


查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 970 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信