题目描述

给定一个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. 洛谷 P4503 [CTSC2014]企鹅QQ

    暴力枚举不同的一位即可.. 主要是常数问题 1.统计答案时用sort速度快于用tr1/unordered_map,后者又快于map (tr1/unordered_map完全达不到理论复杂度上的O(1) ...

  2. simhash与重复信息识别

    在工作学习中,我往往感叹数学奇迹般的解决一些貌似不可能完成的任务,并且十分希望将这种喜悦分享给大家,就好比说:“老婆,出来看上帝”…… 随着信息爆炸时代的来临,互联网上充斥着着大量的近重复信息,有效地 ...

  3. yii2 使用gii生成代码文件

    访问地址: http://localhost/yii2-test/web/index.php?r=gii  如果你通过本机以外的机器访问 Gii,请求会被出于安全原因拒绝. 在web.php修改gii ...

  4. Java环境安装与Eclipse安装

    1.jdk下载安装 2.Eclipse下载安装 遇到的问题: 出现问题原因可能有两个:1)没有配置环境变量 2)jdk和eclipse安装的版本不一致,都是64位或者都是32位. 本人出现错误的原因: ...

  5. deepin15.2无线网无法使用

    原文链接:https://bbs.deepin.org/forum.php?mod=viewthread&tid=40276&highlight=%E6%97%A0%E7%BA%BF% ...

  6. as 开启代码混淆和混淆规则

    app的builde.gradle的文件下,buildTypes节点添加release节点,minifyEnabled属性表示是否开启混淆,proguardFiles表示混淆依赖的文件,具体开启方法如 ...

  7. NBUT 1115 Cirno's Trick (水)

    题意: 给出多个double数,去掉其最小的和最大的,再对余下的求均值. 思路: 再输入时将最大和最小去掉,顺便统计非最值的和,输出时除一下个数即可. #include <bits/stdc++ ...

  8. SQLite基础教程目录

    SQLite基础教程目录 SQLite主页 SQLite概述 SQLite -安装 SQLite -命令 SQLite -语法 SQLite -数据类型 SQLite -创建数据库 SQLite -附 ...

  9. leetcode_1095. Find in Mountain Array_[Binary Search]

    https://leetcode.com/problems/find-in-mountain-array/ 题意:给定一个MountainArray(定义见题目),找到其中最早出现的target值的下 ...

  10. Spring @Transactional at interface

    java - Where should I put @Transactional annotation: at an interface definition or at an implementin ...