如何在不使用%和/运算符的情况下检查数字是否可被5整除。 我想要解决这个问题的最快算法。
一个很好的起点是研究如何通过乘法和移位来完成除法。这个问题是一个地方。
特别是,您可以按照所附的帖子执行以下策略。首先,使用乘法和移位将“除以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整除。
result == dividend
dividend
if(result == dividend) { // dividend is divisible by 5 } else { // dividend is not divisible by 5 }