快速幂计算
来源:互联网 发布:java服务器性能监控 编辑:程序博客网 时间:2024/05/22 12:05
剑指offer里有一个计算整数幂的题目,并不是看一眼就懂的题目。
题目用pow()也可以过,但是考点当然不是用库函数
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
1.先说一个不用递归的经典求快速幂的方法
举个例子,a^11
把11转化为2进制,是1011 = 2^0 + 2^1 + 2^3 . 那么a^11 = a^(2^0) * a^(2^1) * a^(2^3),就成为了一个按位去累乘的过程
class Solution {public: double Power(double base, int exponent) { double r=1;int n; // r 存结果,n为exponent的绝对值 if(exponent==0) // 考虑指数为正、负、零的情况 return 1; else if(exponent < 0) n = -exponent; else n = exponent; while(n != 0){ // 将 n 从最低位开始检测,不断右移,如果最低位是 1 ,那么 r 就乘base(base已经不一定是原来的base) if(n & 1 == 1){ r *= base; } n = n >> 1; base *= base; //每次右移后都把 base 平方 } return exponent>0 ? r:1/r; }};
2.再说一下递归算法
当幂数为偶数:a^n = a^(n/2) * a^(n/2)
当幂数为奇数:a^n = a^((n-1)/2) * a^((n-1)/2) * a
因此我们很容易得出了递归的方法,下面贴出代码
class Solution {public: double Power(double base, int exponent) { double ret=1;int n = abs(exponent); if(exponent==0) return 1; if(n == 1) return base; if(n == 2) return base*base; if(n%2==0){ ret = Power(base, n/2) * Power(base, n/2); //偶数 } else ret = Power(base, (n-1)/2) * Power(base, (n-1)/2) * base; //奇数 return exponent>0 ? ret:1/ret; }};
阅读全文
0 0
- uva1374快速幂计算
- 快速幂计算
- 快速幂计算
- 矩阵快速幂---递推题的快速计算
- 快速计算整数的幂
- 快速乘法计算模幂
- nefu 计算幂 517 (快速幂&递归)
- 快速幂&&快速计算(a*b)mod m
- 组合数计算(快速幂)
- 例题7-13 快速幂计算 UVa1374
- Sum(快速幂+大整数计算)
- 递推计算方法之快速幂计算
- 数值计算——快速幂
- 快速计算Hue色环
- 快速计算正弦波
- 快速个税计算
- 快速MD5计算
- 快速计算平方根
- windows安装numpy简单安装方法
- swift笔记--基础(二)
- MEF 学习笔记
- 手机、电话号码、邮箱、域名、身份证号的测试用例
- 前端面试题——js闭包
- 快速幂计算
- 计算鼠标偏移量
- 洛谷P2463 SDOI【2008】 sandy的卡片 kmp
- 1596: [Usaco2008 Jan]电话网络
- 幸运数4&7:给定正整数n,求不大于n的仅由4和7组成的数字的个数
- 在linux虚机中装vmtools
- LinuxStudyNote(5)-Linux常用命令(1)-命令格式
- 可信区块链评测大揭晓 智链ChainNova获可信区块链预测试证书
- 如何用python实现蛋白质磷酸化位点的搜索