题目描述

给定一个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. python学习之结构语句

    一 循环语句: 1.1 for x in rang(n) :#rang(n)生成左闭右开区间的序列 1.2 while x 条件n: 二条件语句: if 条件表达式: elif 表达式: elif 表 ...

  2. D - 連結 / Connectivity 并查集

    http://abc049.contest.atcoder.jp/tasks/arc065_b 一开始做这题的时候,就直接蒙逼了,n是2e5,如果真的要算出每一个节点u能否到达任意一个节点i,这不是f ...

  3. qq登录,新浪微博登录接口申请过程中遇到的问题

    接口申请下来了,开发很容易的,参数传到就可以了.以前就做过这方面的开发,但是申请还是第一次,网上有关这方面的东东不是很多,所以记录一下申请过程. 1,qq登录接口申请 申请地址是:http://con ...

  4. JavaScript 获取浏览器版本

    //获取IE版本function GetIEVersions(){ var iejson={ isIE:false,safariVersion:0 }; var ua = navigator.user ...

  5. 关于php和docker

    Docker在PHP项目开发环境中的应用 http://www.wolonge.com/zhuanlan/detail/117441 Docker在PHP项目开发环境中的应用 http://linux ...

  6. MySql数据库的相关操作

    SQL(Structred Query Language)结构化查询语言:和数据库交互的语言,进行数据库管理的语言. 一.数据库的操作: 1.查询所有数据库: show databases; 2.创建 ...

  7. git更新到远程服务器代码

    git commit -a 在vi里输入一些内容 wq退出,git pull, git push

  8. CF1149A Prefix Sum Primes

    思路: 质数一定是奇数.实现: #include <bits/stdc++.h> using namespace std; int main() { int n, t, x, y; whi ...

  9. mount_cd9660:/dev/acd0: Input/output error

    mount -t cd9660 /dev/acd0 /cdrom g_vfs_done():acd0[READ(offset32768, length=204]error =5 mount_cd966 ...

  10. Java多态的应用

    //多态的应用 class Animal{     public void eat(){     } } class Dog extends Animal{     public void eat() ...