我需要将一个数字(输入保证为整数&为正数)舍入到下一个5的倍数。
我试过了:
int round = ((grades[j] + 2)/5) * 5;
但是,这会将数字四舍五入到最接近的5的倍数。
例如:67舍入为65而不是70。
答案 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)
一种有效的算法是:
在代码中:
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;
}