c - 不使用 % 和/运算符的 5 的整除率

标签 c algorithm

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

最佳答案

一个好的起点是研究如何通过乘法和移位来完成除法。 This question是一个值得一看的地方。

特别是,您可以按照随附的帖子找到以下策略。首先,使用乘法和移位“除以 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
}

关于c - 不使用 % 和/运算符的 5 的整除率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17113660/

相关文章:

c - 如何将GtkWidget添加到GtkToolbar中?

c - 使用 sed 删除 C/C++ 文件中的函数体

c - 文档互斥定义

c - 如何打印 short int C 对象的字节表示

c++ - 帮助理解步进方 block 算法

algorithm - 删除红黑树的整个子树会保留其属性吗?

c - 指向指针函数的指针--->如何返回指针

java - Java 如何计算正弦和余弦函数?

将首选合作伙伴分成三组的算法

algorithm - 硬币找零问题变体背后的想法是什么?