剑指offer12:求解double类型的浮点数base和int类型的整数exponent的次方。 保证base和exponent不同时为0

1. 题目描述

  给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。

2. 思路和方法

  分析: 由于指数是int 类型,所以要区分整数还是负数或者0。

2.1 直接连续累乘

  会造成多次相乘运算。

2.2 快速幂运算

  写出指数的二进制表达,例如13表达为二进制1101。 通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。 举例:10^1101 = 10^0001*10^0100*10^1000。

3.C++核心代码

3.1 累乘

 1 class Solution {
 2 public:
 3     double Power(double base, int exponent) {
 4         int ab_e = std::abs(exponent);
 5
 6         double res = 1.0;
 7         while(ab_e != 0) {
 8             res *= base;
 9             ab_e--;
10         }
11
12         if (exponent < 0) {
13             res = 1.0 / res;
14         }
15         return res;
16     }
17 };

3.2 幂运算

 1 class Solution {
 2 public:
 3     double Power(double base, int exponent) {
 4         int ab_e = std::abs(exponent);
 5
 6         double res = 1.0;
 7         while(ab_e) {
 8             if (ab_e & 1) {
 9                 res *= base;
10             }
11             base *= base;
12             ab_e >>= 1;
13         }
14         if (exponent < 0){
15             res = 1.0 / res;
16         }
17         return res;
18     }
19 };

参考资料

https://blog.csdn.net/michaelhan3/article/details/88635826

原文地址:https://www.cnblogs.com/wxwhnu/p/11407563.html

时间: 2024-10-10 03:11:56

剑指offer12:求解double类型的浮点数base和int类型的整数exponent的次方。 保证base和exponent不同时为0的相关文章

剑指offer12

/**  * 给定一个double类型的浮点数base和int类型的整数exponent.  * 求base的exponent次方.  * @author user  *   */ /*  * 使用Math类提供的API解决  */ public static double Power(double base,int exponent) { return Math.pow(base, exponent); } /*  * 使用递归的方式求解  */ public static double Po

23、给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 1 class Solution { 2 public: 3     double Power(double base, int exponent) { 4         int p = abs(exponent); 5       double r = 1.0; 6         while(p){ 7             if(p != 0) r *= base; 8   

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

直接上代码了,不解释,很简单的,主要考虑边界值问题 public class Solution { public double Power(double base, int exponent) { boolean isFlag = false; if(exponent == 0) return 1; if(exponent == 1) return base; if(exponent<0) { exponent = -exponent; isFlag = true; } double total

剑指Offer面试题11(Java版):数值的整数次方

题目:实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题 1.自以为很简单的解法: 由于不需要考虑大数问题,这道题看起来很简单,可能不少应聘者在看到题目30秒后就能写出如下的代码: public double powerWithExponent(double base,int exponent){ double result = 1.0; for(int i = 1;i<= exponen

《剑指offer》第四十三题(从1到n整数中1出现的次数)

// 面试题43:从1到n整数中1出现的次数 // 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如 // 输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. #include <iostream> #include <cstring> #include <cstdlib> // ====================方法一==================== //逐个判断,时间复杂度为O(nlogn)

《剑指offer》第六十三题(把字符串转换成整数)

// 面试题67:把字符串转换成整数 // 题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不 // 能使用atoi或者其他类似的库函数. #include <iostream> long long StrToIntCore(const char* str, bool minus); enum Status { kValid = 0, kInvalid }; int g_nStatus = kValid;//设置全局错误变量,用来反映无效输入 int StrToIn

【剑指Offer-面试案例】面试题66:把字符串转为整数

题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 思路 首先判断该数字是整数还是负数,然后在转换的过程中判断字符串表示的数字是否溢出.题目的数字范围是有符号的int型整数,有符号的int型整数(4个字节)的范围为-2147483648 ~ +2147483647,也就是-0x80000000~0x7FFFFFFF.代码如下: class Solution { public: int StrToInt(string str)

《剑指offer》第四十三题:从1到n整数中1出现的次数

// 面试题43:从1到n整数中1出现的次数 // 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如 // 输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. #include <cstdio> #include <cstring> #include <cstdlib> // ====================方法一==================== // 笨方法, 时间复杂度O(nlogn) i

将一个字符串(string类型)转换成一个int类型

int  CommString::str_to_int(const std::string &str) { int ivalue = 0; sscanf(str.c_str(), "%d", &ivalue); return ivalue; }