簡體   English   中英

將正數四舍五入到下一個最接近的 5 的倍數

[英]Rounding off a positive number to the next nearest multiple of 5

我需要將一個數字(輸入保證為 integer 且為正)舍入到下一個 5 的倍數。

我試過這個:

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

但是,這會將數字四舍五入為最接近的 5 的倍數。

例如:67 四舍五入為 65,而不是 70。

四舍五入的一般形式應該是:

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

所以在你的情況下:

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

我們從分母中減去 1 的原因是為了處理舍入值的精確倍數,例如:

((70 + 4) / 5) * 5

將產生70

您可以將grades[j]與下一個數字之間的差值相加,然后將其相加。 例如,如果grades[j] == 1212 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
int mod = grades[j] % 5;
int round = grades[j] - mod;
if (mod > 0) {
    round += 5;
}

這是我使用cmath::abs解決方案

int rounded = n + abs((n % denom) - denom);

您可以更改denom你想要的任何其他面額

嘗試這個:

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

我希望能幫到你。

一種有效的算法是:

  1. 圓形值的一半
  2. 通過將其除以 roundValue 得到數字的余數
  3. 得到除法的商(這樣我們就可以最后乘以它)
  4. 將其與輪值的一半進行比較
  5. 如果它大於一半,則四舍五入到最接近的較大值
  6. 如果它小於一半,則四舍五入到最接近的較小值

在代碼中:

     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;
        }

我有一個功能要四舍五入:

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

為什么這么復雜。 這是代碼。 看一看。

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;
}
def next_multiple_of(number, value):
    return (value // number + 1) * 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM