题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 
初次看题觉得这题好简单,直接用库函数power()不就行了,仔细想了想,万一不让用库函数呢于是就自己实现了一个power()函数,
愚笨的脑子只考虑了一下几点
 
1:base == 0,直接return 0
2:base !=0,但exponent == 0时,return 1
3:base != 0,exponent < 0时,求exponent绝对值,再求base 的exponent次方,然后返回其倒数
4:base != 0,exponent > 0时,求base的exponent次方,
 
c++代码
 
#include <iostream>
using namespace std;
class Solution {
public:
double Power(double base, int exponent) {
double result = 1.0;
if (base == ) return 0.0;
else if (base != && exponent == ){
return 1.0;
} else if (exponent < ){
exponent = -exponent;
for (int i = ; i < exponent; ++i)
result *= base;
return 1.0 / result; }
else{
for (int i = ; i < exponent; ++i)
result *= base;
return (double)result;
}
}
}; int main(){
Solution su;
double base;
int exponent;
while (true){
scanf("%lf%d", &base, &exponent);
printf ("%lf",su.Power(base, exponent));
}
}

找来原书看了之后,好吧我承认我智商太低。

关于代码的完整性:

1:满足基本需求。

2:对一些极端值要考虑到,比如一些边界值。

3:对一些错误输入,有相应的处理方法。

4:最好考虑到算法的效率。

下面是按着原书方法又实现了一次

全面低效的方法:

#include <iostream>
using namespace std; bool InvalidInput = false; bool equal(double val1, double val2)
{
if((val1 - val2 < 0.0000001) && (val1 - val2 > -0.0000001))
return true;
else
return false;
} double Power(double val, int exponent)
{
InvalidInput = false;
if(equal(val, 0.0) && exponent < )
{
InvalidInput = true;
return 0.0;
}
int absExponent = (unsigned int)(exponent);
double rev = 1.0;
if(exponent < )
absExponent = (unsigned int)(-exponent);
for(int i = ; i < absExponent; ++i)
rev *= val;
if(exponent < )
return 1.0 / rev;
else
return rev;
}

高效的方法:原书是这样描述的:

如果exponent = 32,按照上述方法我们要循环31次乘法,

而如果我们知道了base 的16次方可以直接平方就得到了base的32次方

同理在8次方的基础上求16次方很容易用递归实现。

double powerwithunsign(double base, int exponent){
if (exponent == ) return ;
if (exponent == ) return base;
double result = powerwithunsign(base, exponent>>);
result *= result;
if ((exponent & 0x1) == )
result *= base;
return result;
}

(原) 剑指offer--之数值的整数次方的更多相关文章

  1. 《剑指offer》 数值的整数次方

    本题来自<剑指offer> 数值的整数次方 题目: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: 代码从三个方面处 ...

  2. 【剑指Offer】数值的整数次方 解题报告(Python)

    [剑指Offer]数值的整数次方 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  3. (3)剑指Offer之数值的整数次方和调整数组元素顺序

    一 数值的整数次方 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 问题解析: 这道题算是比较麻烦和难一点的一个了.我这里采 ...

  4. 【Java】 剑指offer(15) 数值的整数次方

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 实现函数double Power(double base, int ...

  5. 【剑指offer】数值的整数次方

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/25506085 转载请注明出处:http:// ...

  6. Go语言实现:【剑指offer】数值的整数次方

    该题目来源于牛客网<剑指offer>专题. 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不 ...

  7. 剑指 Offer 16. 数值的整数次方

    实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 来源:力扣(LeetCode) 链接 ...

  8. 剑指OFFER之数值的整数次方(九度OJ1514)

    题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 输入: 输入可能包含多个测试样例.对于每个输入文件,第一行输入一个整数T,表 ...

  9. 剑指Offer 12. 数值的整数次方 (其他)

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目地址 https://www.nowcoder.com/practice/ ...

  10. 剑指offer:数值的整数次方

    题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路: 一开始直接用一个for循环做连乘,测了一下,发现这个指数可能是负 ...

随机推荐

  1. jieba gensim 最好别分家之最简单的相似度实现

    简单的问答已经实现了,那么问题也跟着出现了,我不能确定问题一定是"你叫什么名字",也有可能是"你是谁","你叫啥"之类的,这就引出了人工智能 ...

  2. [HDU1595] find the longest of the shortest

    题目链接: 点我 题意: 给定一个\(n\)个点,\(m\)条边的带权无向图,起点为\(1\),终点为\(n\),现在可以删去其中的一条边,求一种删边方案使得剩下图的最短路值最大,输出这个最短路的长度 ...

  3. 字符串与C51的格式化输出

    一字符数组和字符指针: 字符指针可以用字符串对其直接初始化和随时赋值:而字符数组可以用字符串进行初始化,但不能用字符串对其进行随时赋值(但此时可以定义一个字符串指针指向字符数组,然后用字符串对指针随时 ...

  4. 使用tmodjs

    1.安装 npm install -g tmodjs 2.配置 我的模板都放在tpl文件夹中,htmls用于存放模板页面,每一个后缀名都是.html,而build用于存放编译后输出的模板js. 如果不 ...

  5. Java项目接入阿里云OSS存储

    需求背景 目前公司内部项目所支持的文件云存储方式还是公司内部项目组提供的方案,但在时间的考验之下,弊端显现,尤其是灾备切换过程中需要切换访问地址,这种操作不方便,更可能因为中间过程的失误导致资源不可用 ...

  6. Spring Cloud Config git版

    由于在学习这块内容的时候还不会使用gitHub所以就用了osc的码云 config server POM文件 <dependency> <groupId>org.springf ...

  7. 高性能Javascript总结

    一.加载和运行 Javascript代码执行会阻塞其他浏览器处理过程.充分利用webpack或gulp工具对文件打包压缩,减少js文件的数量,从而减少http请求的次数,以提高网页应用的实际性能. 二 ...

  8. Hibernate框架关系映射一对多双向关联

    直入主题,首先大配置常规配置, 这里住要说关联关系,大配置不多少,而且jar包默认添加好,笔者用的是idea2016. 然后我们知道关联关系主要是在小配置添加节点来配置属性.个人认为关联映射,就是对应 ...

  9. MyEclipse中把java项目打包——含有第三方jar包【转】

    也适用于eclipse导出jar. 在将项目打包为jar包时一直出现“ClassNotDefFound”错误,百度了很多解决办法都没有解决.最终找到一个很好的解决办法. 1.打包步骤 (1)右键单击j ...

  10. Spring下读取properties文件

    由于在spring的xml文件中配置了 <bean id="validator" class="org.springframework.validation.bea ...