前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速乘(俄罗斯农民乘法)

快速乘(俄罗斯农民乘法)

作者头像
渔父歌
发布2020-06-11 16:45:13
1.1K0
发布2020-06-11 16:45:13
举报
文章被收录于专栏:数据结构笔记数据结构笔记

算法原理

先看看我们笔算乘法是怎么计算的:

代码语言:javascript
复制
   88
x  99
----------
  792
+792
----------
 8712

这个过程可以用公式表达为:

代码语言:javascript
复制
88 * 99 = 88 * 9 * 10^0 + 88 * 9 * 10^1
        = 792 + 7920
        = 8712

根据这个原理,我们把第二个乘数换成二进制:

代码语言:javascript
复制
88 * 0110 0011(2) = 88 * 0 * 2^7 
                  + 88 * 1 * 2^6 
                  + 88 * 1 * 2^5 
                  + 88 * 0 * 2^4 
                  + 88 * 0 * 2^3 
                  + 88 * 0 * 2^2 
                  + 88 * 1 * 2^1
                  + 88 * 1 * 2^0

算法用途

通常用在大数相乘取模的情况,可以防止大数相乘溢出。 当我们使用 int类型做快速乘运算时就相当于模2^32(假设 int类型是 4位)。

代码实现

代码语言:javascript
复制
int quickMulti(int A, int B) {
    int ans = 0;
    for ( ; B; B >>= 1) {
        if (B & 1) {
            ans += A;
        }
        A <<= 1;
    }
    return ans;
}

// 作者:LeetCode-Solution
// 链接:https://leetcode-cn.com/problems/qiu-12n-lcof/solution/qiu-12n-by-leetcode-solution/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法原理
  • 算法用途
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档