一尘不染

不使用%和/运算符的可除性为5

algorithm

如何在不使用%和/运算符的情况下检查数字是否可被5整除。 我想要解决这个问题的最快算法。


阅读 262

收藏
2020-07-28

共1个答案

一尘不染

一个很好的起点是研究如何通过乘法和移位来完成除法。这个问题是一个地方。

特别是,您可以按照所附的帖子执行以下策略。首先,使用乘法和移位将“除以5”:

 int32_t div5(int32_t dividend) {
     int64_t invDivisor = 0x33333333;
     return 1 + (int32_t) ((invDivisor * dividend) >> 32);
 }

然后,将结果乘以5:

int result = div5(dividend) * 5;

然后,result == dividend如果且仅dividend可被5整除。

if(result == dividend) {
    // dividend is divisible by 5
}
else {
    // dividend is not divisible by 5
}
2020-07-28