将数字四舍五入到下一个最接近的5的倍数

时间:2017-05-22 10:29:49

标签: c++

我需要将一个数字(输入保证为整数&为正数)舍入到下一个5的倍数。

我试过了:

int round = ((grades[j] + 2)/5) * 5;

但是,这会将数字四舍五入到最接近的5的倍数。

例如:67舍入为65而不是70。

8 个答案:

答案 0 :(得分:7)

要整理一般表格应该是:

((n + denominator -1) / denominator )* denominator 

所以在你的情况下:

int round = ((grades[j] + 4)/5) * 5;

我们从分母中扣除1的原因是为了处理舍入值的精确倍数,例如:

((70 + 4) / 5) * 5

会产生70

答案 1 :(得分:5)

您可以将grades[j]与下一个数字区分开来,然后添加它。例如,如果grades[j] == 12然后12 mod 5 == 2,则添加5 - 2

以下是测试它的示例程序:

#include <iostream>

int main() {
    int x[] = {2,7,123,32}; // some random numbers to show how this works
    for (int i = 0; i < 4; {
        std::cout << x[i] << "\t" << x[i] + ((5-(x[i] % 5)) % 5) << std::endl;
    }
    return 0;
}

输出:

2   5
7   10
123 125
32  35

答案 2 :(得分:2)

int mod = grades[j] % 5;
int round = grades[j] - mod;
if (mod > 0) {
    round += 5;
}

答案 3 :(得分:0)

试试这个:

int num = grades[j] % 5 < 3 ? grades[j] - (grades[j] % 5) : grades[j] - (grades[j] % 5) + 5;

这里是演示代码:

#include <stdio.h>

int main() {
    //code
    int grades[5] = {10, 68, 12, 67, 41};
    int j;
    for (j = 0; j < 5; j++)
    {
        int num = grades[j] % 5 < 3? grades[j] - (grades[j] % 5) : grades[j] - (grades[j] % 5) + 5;
        printf("%d\n",num);
    }

    return 0;
}

<强>输出:

10
70
10
65
40

我希望能帮助你。

答案 4 :(得分:0)

这是我使用cmath::abs

的解决方案
int rounded = n + abs((n % denom) - denom);

您可以用其他任何面额更改denom

答案 5 :(得分:0)

我有一个向上取整的功能:

def next(number, base):
    temp = round(number / base) * base
    return temp

您可以像这样使用它:

next(grade[j], 5)

在功能上将是:

temp = round(67 / 5) * 5
return temp #temp = 75

某些情况下不使用回合而是使用ceil

答案 6 :(得分:0)

为什么这么复杂。 这是代码。 看看。

vector<int> gradingStudents(vector<int> grades) {
    int size = grades.size();
    for(int i=0;i<size;i++)
    {
        if(grades[i]>40)
        {
            if((grades[i]+2)%5==0)
            grades[i]=grades[i]+2;
            else if((grades[i]+1)%5==0)
            grades[i]=grades[i]+1;
        }
        else if(grades[i]>37&&grades[i]<40)
        grades[i]=40;
    }
return grades;
}

答案 7 :(得分:-1)

一种有效的算法是:

  1. 圆值的一半
  2. 通过将其除以roundValue
  3. 获取剩余数字
  4. 获得除法的商(以便我们可以最终乘以它)
  5. 将其与圆值的一半进行比较
  6. 如果它大于一半,则会转到最接近的更大值
  7. 如果它不到一半就会转到最接近的较小值
  8. 在代码中:

         int round(int nearest , int number){
                int half = nearest / 2;
                int answer = 0;  
                int remainder = number% nearest ;
                int quotient = number/ nearest ;
                if(remainder > half ){
                    answer =(quotient+1) * nearest ;
                }else{
                    answer =quotient * nearest ;
                }
            return answer;
            }