剑指offer---12-**--数值的整数次方

https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&tqId=11165&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tPage=1

题意

给你一个 base底数,一个指数exponent求出最后的结果。

分析

http://blog.csdn.net/jsqfengbao/article/details/47164537

//上来判断base有负数,0,正数;exponent有负数,0,正数

//其中的特殊情况包括:

//1.异常情况,0的负数次方

//2.指数为0的情况

//3.底数为负数的情况

//4.正常情况

代码

public class Solution {

public double Power(double base, int exponent) throws Exception{

if(equal(base,0.0)&&exponent<0)throw new Exception("0没有负数指数的情况");

if(exponent==0)return 1;

if(exponent<0)return getResult(1.0/base,-exponent);

return getResult(base,exponent);

}

//求出最后的结果,这里的问题是如何简化次方的计算方式。使用平方的方式计算会更简单一些

public double getResult(double base,int exponent){

if(exponent==0)return 1;

if(exponent==1)return base;

double result = getResult(base,exponent>>1);

result = result *result;

if((exponent&1)==1)result*=base;

return result;

}

//因为计算机表示小数是会有误差的不能够直接使用==判断

//如果两个小数的绝对值差小于0.0000001,那么说明相等,也就是-0.0000001<distance<0.0000001

public boolean equal(double num1,double num2){

if(-0.0000001<(num1-num2) && (num1-num2)<0.0000001){

return true;

}else{

return false;

}

}

}

总结的细节:

1.double类型的数据如何判断相等:绝对值的差距<0.0000001的时候默认相等,不能够像int类型一样简单的使用==来判断。而且绝对值差距<0.0000001就是大于-0.0000001并且小于0.0000001

2.判断某个数是否为奇数还是偶数的方式,就是通过将这个数和1做与操作得出结果。

3.>>带符号移动的问题。

原文地址:https://www.cnblogs.com/buptyuhanwen/p/9377015.html

时间: 2024-11-13 04:31:58

剑指offer---12-**--数值的整数次方的相关文章

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

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目地址 https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&tqId=11165&tPage=1&rp=3&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-

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

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25506085 剑指offer上的第十一题,九度OJ上测试通过. 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 输入: 输入可能包含多个测试样例.对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开. 输出: 对应每

剑指offer:数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class Solution: def Power(self, base, exponent): # 任何数的0次方都是1 if exponent == 0: return 1 # 0的任何次方(除了0的0次方)都为0 if base == 0: return 0 # 先记录指数符号 sign = exponent > 0 exponent = abs(exponent) re

剑指offer (11) 数值的整数次方

利用create groups for any added folders 这样的方式表示的是将所有的资源都放在资源包得路径下,没有层次的概念利用create folder references for any added folders这样的表示方式是在按照原来文件夹的方式将他们放入到安装包中的.在安装包中有几个这样的文件夹:(这些文件都是位于家路径下的)(1)Documents: 该文件夹用于程序数据文件写入到该目录下,用于存储用户数据以及需要备份的数据.(2)Library:include

牛客网习题剑指offer之数值的整数次方

分析: 要考虑到exponent为0和负数的情况. 如果base是0并且exponent是负数的时候呢?那就发生除0的情况了. AC代码: public class Solution { public double Power(double base, int exponent) { if(exponent == 0) return 1; if(Math.abs(base) <= 0.000000000000001) return 0; boolean reverseFlag = exponen

剑指Offer--第16题 数值的整数次方

第16题 数值的整数次方 题目:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路 看到有点懵,第一感觉觉得是不是应该考虑0的0次或者负数情况,还有就是浮点类型没办法使用"="号,最后自己以偷懒的方式直接调用Java的API,如果面试题中不让调用库函数,那么基本上这题就是挂了可能. 以上题目描述来自牛客,没有对使用做限制.真正的剑指offer上有限制条件不得使用库函数,同时不需要考虑大数问题. 自己的low代码 publ

【剑指offer】字符串转整数

转载请注明出处:http://blog.csdn.net/ns_code/article/details/28015693 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000). 输出: 对应每个测试案例,若输入为一个合法的字符串(即代表一个整数),则输出这个整数.若输入为一个非法的字符串,则输出"My God". 样

剑指offer (12) 打印1到最大的n位数

题目描述: 给定一个数字N,打印从1到最大的N位数 此题需要注意以下几点: 1. 涉及到大数问题,因为并没有限定 n的取值范围,所以需要采取 字符数组模拟大数运算 2. 打印数字时 需要忽略前置0 3. 我们始终 以n位数为整体,n位所有十进制数其实是 n位从0到9的全排列,可以采用递归解决 我们从 数组下标0开始 (对应于数字最高位),每一位都有0到9取值,然后设置下一位,递归的结束条件是 设置位到了数组的最末端 1 void PrintNum(char* num) 2 { 3 char* c

[剑指Offer]12.二进制中1的个数

题目 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路 把一个整数减去1,再和原整数做与运算,会把整数最右边一个1变成0.那么一个整数的二进制表示中有多少个1,就可以进行多次这样的操作. 代码 /*--------------------------------------- * 日期:2015-07-20 * 作者:SJF0115 * 题目: 12.二进制中1的个数 * 结果:AC * 网址:http://www.nowcoder.com/books/coding-int

剑指offer 12:数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. public class Solution { public double Power(double base, int exponent) { boolean isNegtive = false; if(exponent == 0) return 1; if(exponent == 1) return base; if(exponent < 0){ isNegtive =