小小算法之路 Day1 快速幂运算
来源:互联网 发布:恒生杠杆软件 编辑:程序博客网 时间:2024/06/04 23:21
①例如求两个数a*b
小学里我们把这道式子看成是b个a的相加,现在我们把b变成一个二进制的式子 ex:3*53->可以看成3*(110101)->3*(100000*1+10000*1+1000*0+100*1+10*0+1*1)
对于判断b的对应的二进制的每个位是1或是0,这里用到b&1可以判断当前位是1或0;
下面贴函数来理解
public int f(int a,int b)
{
int res=0; //用来记录每次b移位后的和;
while(b!=0)
{
if((b&1)!=0)
{
res+=a;
}
b>>=1;// 移位
a=(a+a); //更新a的值;
}
return res;
}
有了上面的基础,我们再扩展到a^b 对于a^b这里有所不同了 3^(100000*1+10000*1+1000*0+100*1+10*0+1*1)每次更新值后,记录值乘上更新后的a
public int multiply(int a,int b)
{
int res=1;
while(b!=0)
{
if((b&1)!=0)
{
res=f(res,a);
}
b>>=1;
a=f(a,a);
}
return res
}
0 0
- 小小算法之路 Day1 快速幂运算
- 大数运算之快速幂算法
- 快速幂之模运算
- 位运算之快速幂
- Python之路,Day1
- Python之路,Day1
- Python之路,Day1
- 指数运算快速算法
- Day1 -- 小小天学习 eclipse
- 百度之星2012初赛Day1 B - 小小度刷礼品
- 〖数学算法〗大数模幂运算快速算法
- 〖数学算法〗大数模幂运算快速算法
- python自动化之路-day1
- C++学习之路 day1
- python自动化之路-day1
- 算法学习之快速幂
- 交互设计学习day1 之二 快速原型工具
- c++之路,小小感慨
- 清华镜像源下载Android源码
- 软件工程简介(上)--个人看法
- Uiautomator自动化测试环境搭建eclipse+sdk+ADT——小白入门超详细
- SVProgressHUD网络延迟点击返回蒙板不消失的解决方案
- /usr/bin/env: node: 没有那个文件或目录
- 小小算法之路 Day1 快速幂运算
- 剑指Offer面试题32:从1到n整数中1出现的次数 Java实现
- Android-ListView的学习(三)
- Bootstrap Datatable 简单的基本配置
- Java Web中的过滤器
- 快捷键 -- windows
- BZOJ 3155
- Chronometer计时器
- codeforces 500C New Year Book Reading(取书)