我有下面的函数,它根据输入返回一个值。我需要尽可能快地编写此代码,而不使用除法运算符或模运算符或循环。 每个连续的值由几乎等于 6553 的数量分隔。
int GetScalingFactor(int input)
{
unsigned int factor = 0;
if(input < 13107) factor = 72816;
else if(input < 19660) factor = 81918;
else if(input < 26214) factor = 93621;
else if(input < 32767) factor = 109225;
else if(input < 39321) factor = 131070;
else if(input < 45874) factor = 163837;
else if(input < 52428) factor = 218450;
else if(input < 58981) factor = 327675;
return factor;
}
最佳答案
在 C++ 中使用 std::lower_bound
:
int GetScalingFactor(int input)
{
const unsigned int inputs[] = {13107, 19660, 26214, 32767, 39321, 45874, 52428, 58981};
const int factors[] = {72816, 81918, 93621, 109225, 131070, 163837, 218450, 327675, 0};
auto it = std::lower_bound(std::begin(inputs), std::end(inputs), input + 1);
return factors[std::distance(std::begin(inputs), it)];
}
关于c++ - 优化范围检查和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43274014/