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 100


roundUp(117, 100)

//return 200


roundUp(477, 100)

//return 500


roundUp(1077, 100)

//return 1100


roundUp(52, 20)

//return 60


roundUp(74, 30)

//return 90


海绵宝宝撒
浏览 971回答 3
3回答

慕无忌1623718

这适用于正数,不确定负数。它只使用整数数学。int roundUp(int numToRound, int multiple){&nbsp; &nbsp; if (multiple == 0)&nbsp; &nbsp; &nbsp; &nbsp; return numToRound;&nbsp; &nbsp; int remainder = numToRound % multiple;&nbsp; &nbsp; if (remainder == 0)&nbsp; &nbsp; &nbsp; &nbsp; return numToRound;&nbsp; &nbsp; return numToRound + multiple - remainder;}编辑:这是一个使用负数的版本,如果用“向上”表示结果总是> =输入。int roundUp(int numToRound, int multiple){&nbsp; &nbsp; if (multiple == 0)&nbsp; &nbsp; &nbsp; &nbsp; return numToRound;&nbsp; &nbsp; int remainder = abs(numToRound) % multiple;&nbsp; &nbsp; if (remainder == 0)&nbsp; &nbsp; &nbsp; &nbsp; return numToRound;&nbsp; &nbsp; if (numToRound < 0)&nbsp; &nbsp; &nbsp; &nbsp; return -(abs(numToRound) - remainder);&nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; return numToRound + multiple - remainder;}

慕码人8056858

没有条件:int roundUp(int numToRound, int multiple)&nbsp;{&nbsp; &nbsp; assert(multiple);&nbsp; &nbsp; return ((numToRound + multiple - 1) / multiple) * multiple;}对于负数,这类似于从零开始舍入编辑:适用于负数的版本int roundUp(int numToRound, int multiple)&nbsp;{&nbsp; &nbsp; assert(multiple);&nbsp; &nbsp; int isPositive = (int)(numToRound >= 0);&nbsp; &nbsp; return ((numToRound + isPositive * (multiple - 1)) / multiple) * multiple;}如果multiple是2的幂int roundUp(int numToRound, int multiple)&nbsp;{&nbsp; &nbsp; assert(multiple && ((multiple & (multiple - 1)) == 0));&nbsp; &nbsp; return (numToRound + multiple - 1) & -multiple;}

largeQ

当因子始终为正时,这种方法有效:int round_up(int num, int factor){&nbsp; &nbsp; return num + factor - 1 - (num - 1) % factor;}编辑:返回round_up(0,100)=100。请参阅下面的保罗评论,以获得返回的解决方案round_up(0,100)=0。
打开App,查看更多内容
随时随地看视频慕课网APP