本文介绍了清洁,高效的算法在C包装整数++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
/ **
*返回一个数字kLowerBound和kUpperBound之间
*例如为:环绕(-1,0,4); //返回4
*例如为:环绕(5,0,4); //返回0
* /
INT包裹(INT常量的kX,INT常量kLowerBound,INT常量kUpperBound)
{
//推荐的实现?
}
解决方案
A%B的标志
只被定义,如果 A
和 B
都是非负的。
INT包裹(INT的kX,INT常量kLowerBound,INT常量kUpperBound)
{
INT range_size = kUpperBound - kLowerBound + 1;
如果(KX< kLowerBound)
的kX + = range_size *((kLowerBound - KX)/ range_size + 1);
返回kLowerBound +(KX - kLowerBound)%range_size;
}
/**
* Returns a number between kLowerBound and kUpperBound
* e.g.: Wrap(-1, 0, 4); // Returns 4
* e.g.: Wrap(5, 0, 4); // Returns 0
*/
int Wrap(int const kX, int const kLowerBound, int const kUpperBound)
{
// Suggest an implementation?
}
解决方案
The sign of a % b
is only defined if a
and b
are both non-negative.
int Wrap(int kX, int const kLowerBound, int const kUpperBound)
{
int range_size = kUpperBound - kLowerBound + 1;
if (kX < kLowerBound)
kX += range_size * ((kLowerBound - kX) / range_size + 1);
return kLowerBound + (kX - kLowerBound) % range_size;
}
这篇关于清洁,高效的算法在C包装整数++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!